Unity中transform.root返回错误对象:获取预制体而非克隆实例
问题解决:transform.root返回预制体而非场景实例
问题原因
你遇到的情况大概率是在预制体编辑窗口内运行代码导致的。Unity的预制体编辑模式下,transform.root会指向预制体的原始根对象(即未实例化的CityCenter),而非场景中克隆出来的CityCenter(Clone)。即使你把预制体拖到场景里,如果代码是在预制体内部编辑状态下测试,依然会读取预制体的根。
解决办法
切换到场景视图运行代码
把预制体实例拖入场景后,确保选中的是场景中的CityCenter(Clone)对象,而非在预制体编辑窗口内操作,再运行游戏测试。手动遍历父物体获取实例根
如果你需要确保无论在什么模式下都能拿到当前实例的根对象,可以手动递归遍历父物体,替代transform.root:GameObject GetInstanceRoot(Transform startTransform) { Transform current = startTransform; while (current.parent != null) { current = current.parent; } return current.gameObject; } // 调用方式 GameObject parentObj = GetInstanceRoot(this.transform);判断当前对象是否为预制体实例
可以通过API判断对象是否是场景中的实例,避免读取预制体根:if (UnityEditor.PrefabUtility.IsPartOfPrefabInstance(this.gameObject)) { // 是场景实例,正常获取根 GameObject parentObj = this.transform.root.gameObject; } else { // 处于预制体编辑模式,做兼容处理 Debug.LogWarning("当前处于预制体编辑模式,无法获取场景实例根"); }
内容的提问来源于stack exchange,提问作者Splosh
相关产品推荐
相关产品推荐

