为什么我得到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();

为什么我得到NullReferenceException时,试图在Unity c#中创建一个健康包

没有名为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。简化你的问题!