好的家伙和女孩我再次遇到一些代码问题。基本上,一旦我开始尝试创建一个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();
答案 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
的脚本。简化你的问题!