GameObject.Find无法正常工作。我该如何解决?

时间:2018-02-10 21:13:21

标签: c# unity3d object-reference

好的,所以我有一个简单的fps迷宫游戏,你可以射击目标打开门到达终点。当我拍摄第二个目标时,它告诉我该引用未设置为对象的实例。 (我必须使用开发者控件来达到第二个目标)

第一个目标标记为“targ1”,门口名为“wall1”。它应该停用“wall1”,但它会停用“wall2”。它在统一编辑器中按预期工作,但不在独立应用程序中。

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);       
}

我把头发拉过来。我已经检查过以确保标签和名称是正确的。甚至完全删除了我的所有场景并重新做了它们,没有。任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

好的,如果其他人有同样或类似的问题,我找到了导致我的问题的答案。它与我繁琐的编码方式无关,它与Unity有关。 我有" wall1"在预制件内。在我的预制件中,对象的名称是" wall1"。因此,在此预制件的任何实例中,对象名称将默认为wall1。  为了阻止这种情况发生,你必须打破预制实例,否则系统仍然会认为它的名称与预制件中的名称相同。 我想这只是为了表明理解代码并不会带给你,你也必须了解你的编辑。