【发布时间】:2019-01-30 01:15:13
【问题描述】:
我在 Unity 中有两个场景。第一个用于从二进制文件导入数据,在导入文件后,我使用从二进制文件中读取的坐标创建一个游戏对象。我为这个游戏对象使用DontDestroyOnLoad。
然后我使用AsyncOperation 加载我的第二个场景并使用GameObject.Find 找到我的对象。这很好用,我可以找到对象并进行操作。然而,在我的第二个场景中,我有一个重置按钮,我使用AsyncOperation 重新加载相同的场景。重新加载场景时GameObject.Find 找不到我的对象。顺便说一句,这只发生在 Android 构建中。在编辑器中发现对象没有问题。
这就是我重新加载场景的方式,我的ResetScene 函数在按下按钮时被调用。
void ResetScene()
{
StartCoroutine(LoadAsyncScene());
}
IEnumerator LoadAsyncScene()
{
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("ARSession");
while (!asyncLoad.isDone)
{
yield return null;
}
}
有没有人知道为什么会出现这个问题,或者有没有人对寻找对象有更好的想法?由于我在运行时创建对象,我觉得除了GameObject.Find 之外别无选择。任何帮助,将不胜感激。谢谢!
注意:我尝试在Start 和OnLevelWasLoaded 中查找对象。两个都没用。
我使用这个记录了层次结构中的每个游戏对象:
foreach (GameObject obj in Object.FindObjectsOfType(typeof(GameObject)))
{
Debug.Log(obj.name);
}
在初始加载时,我创建的游戏对象已记录,但在我重新加载场景后,我的对象未加载。
我实际上找到了问题的根源。我正在改变父母 我的对象从
null到另一个对象,显然这导致 问题。但是,我不知道如何解决这个问题,因为我必须 更改父级我无法更改该逻辑。
【问题讨论】:
-
我可以看看你的统一日志吗?
-
你可以从here看到它
-
当您使用
Find时,新父级是否可能处于非活动状态?Find的变体仅返回活动和启用的对象/组件! -
不,实际上我正在更改对象的父对象,并且由于
DontDestroyOnLoad不能应用于子对象,我的对象已被破坏,但我不知道如何解决这个问题。如果我再次创建父null,它并不能解决问题。