我试图让脚本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
脚本TrippleBalls
位于组件SceneTrigger
这是一张显示上述代码所在位置的图片。
上面的代码位于名为LBackBoard
的类中,该类已放入RBackBoard
和getBallCount
当我测试代码时,Object reference not set to an instance of an object
返回0(以满足上述条件),我收到以下错误:
error
此错误行将我发送到上面代码中标记为{{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");
}
}
}
<强>建议强>:
给你的建议是,当在另一个GameObject中寻找另一个GameObject时,使用&#39; /&#39;就像你在文件夹路径中一样。例如,TrippleBall属于Specialties GameObject。因此,请使用GameObject.Find("Specialties/TrippleBall");
代替GameObject.Find("TrippleBall");