GameObject.Find 无法正常工作。我该如何解决?
GameObject.Find isn't working correctly. How do I fix?
好吧,我有一个简单的 fps 迷宫游戏,您可以在其中射击目标以打开门到达终点。当我射击第二个目标时,它告诉我参考未设置为对象的实例。 (我必须使用开发人员控件才能到达第二个目标)
第一个目标被标记为 "targ1",门口被命名为 "wall1"。它应该停用 "wall1" 但它却停用了 "wall2"。它在 unity 编辑器中按预期工作,但在独立应用程序中不起作用。
void OnTriggerEnter(Collider other) {
if (other.tag == "targ1")
GameObject.Find("wall1").SetActive(false);
if (other.tag == "targ1x2"){
GameObject.Find("wall1").SetActive(false);
GameObject.Find("wall1").SetActive(false);
} //In the build this is where the error is ^^
if (other.tag == "targ2")
GameObject.Find("wall2").SetActive(false);
if (other.tag == "targ3")
GameObject.Find("wall3").SetActive(false);
if (other.tag == "targ4")
GameObject.Find("wall4").SetActive(false);
if (other.tag == "Finish")
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
我为此焦头烂额。我已检查以确保标签和名称正确无误。甚至完全删除我所有的场景并重新制作它们,什么也没有。任何帮助将不胜感激。谢谢你。
好的,如果其他人遇到同样或类似的问题,我找到了导致我的问题的答案。这与我繁琐的编码方式无关,与 Unity 有关。
我在预制件中有 "wall1"。在我的预制件中,对象的名称是 "wall1"。因此,在这个预制件的任何实例中,对象名称将默认为 wall1。
为了阻止这种情况发生,您必须破坏预制实例,否则系统仍会认为它的名称与预制中的名称相同。
我想这只是表明理解代码不会让你受益,你还必须理解你的编辑器。
好吧,我有一个简单的 fps 迷宫游戏,您可以在其中射击目标以打开门到达终点。当我射击第二个目标时,它告诉我参考未设置为对象的实例。 (我必须使用开发人员控件才能到达第二个目标)
第一个目标被标记为 "targ1",门口被命名为 "wall1"。它应该停用 "wall1" 但它却停用了 "wall2"。它在 unity 编辑器中按预期工作,但在独立应用程序中不起作用。
void OnTriggerEnter(Collider other) {
if (other.tag == "targ1")
GameObject.Find("wall1").SetActive(false);
if (other.tag == "targ1x2"){
GameObject.Find("wall1").SetActive(false);
GameObject.Find("wall1").SetActive(false);
} //In the build this is where the error is ^^
if (other.tag == "targ2")
GameObject.Find("wall2").SetActive(false);
if (other.tag == "targ3")
GameObject.Find("wall3").SetActive(false);
if (other.tag == "targ4")
GameObject.Find("wall4").SetActive(false);
if (other.tag == "Finish")
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
我为此焦头烂额。我已检查以确保标签和名称正确无误。甚至完全删除我所有的场景并重新制作它们,什么也没有。任何帮助将不胜感激。谢谢你。
好的,如果其他人遇到同样或类似的问题,我找到了导致我的问题的答案。这与我繁琐的编码方式无关,与 Unity 有关。 我在预制件中有 "wall1"。在我的预制件中,对象的名称是 "wall1"。因此,在这个预制件的任何实例中,对象名称将默认为 wall1。 为了阻止这种情况发生,您必须破坏预制实例,否则系统仍会认为它的名称与预制中的名称相同。 我想这只是表明理解代码不会让你受益,你还必须理解你的编辑器。