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。 为了阻止这种情况发生,您必须破坏预制实例,否则系统仍会认为它的名称与预制中的名称相同。 我想这只是表明理解代码不会让你受益,你还必须理解你的编辑器。