提问人:Aromatic Arthur 提问时间:6/2/2022 更新时间:9/18/2023 访问量:548
我在 Unity 2D 的碰撞体 2D 中收到空引用异常
I'm getting a null reference Exception in my collider 2D in Unity 2D
问:
所以我正在制作一个飞扬的鸟游戏,但除了,玩家只有在撞到后墙时才会死亡。如果他撞到墙上,它应该访问我的 GameManager 中的一个函数(空对象),该函数会重新调整场景。
public void OnTriggerEnter2D(Collider2D Doom)
{
Debug.Log("Collider works");
GetComponent<GameManager>().EndGame();
}
在这种情况下,Doom 是后墙。当我运行游戏时,我收到错误 NullReferenceException: Object reference not set to an instance of an object。
你能帮我吗?
答:
0赞
sakaibats
9/17/2023
#1
当您指向 null 的内容时,会发生 NullReferenceException。在本例中,为 GetComponent()。EndGame() 为 null。
就像 imserhane 提到的,当你使用 GetComponent<>() 时,你试图从这个脚本附加到的游戏对象中检索组件。在您的例子中,这两个脚本可能附加到不同的游戏对象。
您可以改用 FindObjectOfType,就像 Iggy 提到的一样。唯一的问题是,您可以保存对 gameManager 的引用,使其更加优化,而不是每次调用 OnTriggerEnter2D 时都调用 FindObjectOfType。在这个游戏中,这可能无关紧要,但这样做是一个很好的做法。
这就是你的做法。
GameManager gameManager;
// Save a reference to your GameManager
void Awake()
{
gameManager = FindObjectOfType<GameManager>();
}
// Modify your code like this
public void OnTriggerEnter2D(Collider2D Doom)
{
Debug.Log("Collider works");
gameManager.EndGame();
}
如果您想了解有关 NullReferenceException 的更多信息,可以观看此视频,该视频通过示例详细解释了该错误,希望这对您有所帮助!
评论
FindObjectOfType<GameManager>().EndGame();
GetComponent