触发不在Unity中激活

时间:2016-05-17 07:48:57

标签: c# unity3d

我试图让脚本void OnTriggerEnter(Collider col) { if (col.gameObject.tag == "ball") { col.gameObject.GetComponent<Ball>().setIsOffScreen(true); /*error*/ if (GameObject.Find("TrippleBalls").GetComponent<TripleBall>().getBallCount() == 0) { Debug.Log("Loading next screen..."); SceneManager.LoadScene("GameOverScene"); } } } 中的方法返回0时切换场景。我知道它在适当的时候返回0,因为我已经测试过了。这是我切换场景的代码:

TrippleBalls

这是一张显示TrippleBall

的图片

enter image description here

脚本TrippleBalls位于组件SceneTrigger

这是一张显示上述代码所在位置的图片。

enter image description here

上面的代码位于名为LBackBoard的类中,该类已放入RBackBoardgetBallCount

当我测试代码时,Object reference not set to an instance of an object返回0(以满足上述条件),我收到以下错误:

error

此错误行将我发送到上面代码中标记为{{1}}的位置。

如果有人能帮助我解决这个问题,那就太棒了。谢谢!

1 个答案:

答案 0 :(得分:3)

您在场景中将GameObject命名为TrippleBall,但您正在场景中寻找TrippleBalls。只需将GameObject.Find("TrippleBalls")更改为GameObject.Find("TrippleBall");

也不要在OnTrigger函数中使用GameObject.Find。它会减慢你的游戏速度。在一个局部变量中使用TripleBall然后你可以重复使用它。

TripleBall myTripleBall = null;

void Strt(){
//Cache TripleBall
myTripleBall = GameObject.Find("TrippleBalls").GetComponent<TripleBall>()
}

现在您可以随时重复使用它。

void OnTriggerEnter(Collider col)
{
    if (col.gameObject.tag == "ball")
    {
        Debug.Log("COUNT IS: "+myTripleBall.getBallCount());
        col.gameObject.GetComponent<Ball>().setIsOffScreen(true);
        if (myTripleBall.getBallCount() == 0) {

            Debug.Log("Loading next screen...");
            SceneManager.LoadScene("GameOverScene");
        }
    }
}

确保在构建设置中添加 GameOverScene 场景。 enter image description here

<强>建议: 给你的建议是,当在另一个GameObject中寻找另一个GameObject时,使用&#39; /&#39;就像你在文件夹路径中一样。例如,TrippleBall属于Specialties GameObject。因此,请使用GameObject.Find("Specialties/TrippleBall");代替GameObject.Find("TrippleBall");