为什么我得到NullReferenceException时,试图在Unity c#中创建一个健康包
本文关键字:创建 健康 一个 Unity NullReferenceException 为什么 | 更新日期: 2023-09-27 18:07:35
好了,伙计们,姑娘们,我又遇到了一些代码的问题。基本上,一旦我开始,它试图创建一个生命值包,它抛出一个错误:
NullReferenceException:对象引用未设置为对象的实例HealthSpawnerScript。更新()(在Assets/Scripts/HealthSpawnerScript.cs:31)
下面是我正在运行的代码。游戏对象PlayerController包含一个名为PlayerHealth()的方法,用于返回玩家健康值。在清醒时,我设置playerController找到脚本和方法后,我。然后在更新中,我试图调用该方法并将其分配给变量,以便稍后在脚本中使用。我知道这应该很简单,但我有一个大脑屁,伙计们。
public PlayerController playerController;
private int healthHolder;
void OnAwake()
{
playerController = GameObject.Find ("PlayerHealth").GetComponent<PlayerController> ();
}
// Use this for initialization
void Start ()
{
//set healthExist to false to indicate no health packs exist on game start
healthExist = false;
//playerController = GameObject.Find ("PlayerHealth").GetComponent<PlayerController> ();
}
// Update is called once per frame
void Update ()
{
healthHolder = playerController.PlayerHealth();
没有名为OnAwake
的Unity回调函数。您可能正在寻找Awake
函数。
如果这个问题已经解决了,但你的问题仍然存在,你必须把你的代码分成几个部分,找出失败的地方。
playerController = GameObject.Find ("PlayerHealth").GetComponent<PlayerController> ();
改为
void Awake()
{
GameObject obj = GameObject.Find("PlayerHealth");
if (obj == null)
{
Debug.Log("Failed to find PlayerHealth GameObject");
return;
}
playerController = obj.GetComponent<PlayerController>();
if (playerController == null)
{
Debug.Log("No PlayerController script is attached to obj");
}
}
所以,如果GameObject.Find("PlayerHealth")
失败,这意味着场景中没有具有该名称的GameObject。请检查拼写。
如果obj.GetComponent<PlayerController>();
失败,没有名为PlayerController
的脚本附加到PlayerHealth
GameObject。简化你的问题!