为什么在尝试在Unity C#中创建HealthPack时会出现NullReferenceException?

时间:2016-09-18 22:11:54

标签: c# unity3d unity5

好的家伙和女孩我再次遇到一些代码问题。基本上,一旦我开始尝试创建一个Health Pack,它就会抛出一个错误:

NullReferenceException:未将对象引用设置为对象的实例 HealthSpawnerScript.Update()(在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();

1 个答案:

答案 0 :(得分:0)

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