Unity3D在瞬间获取NullReferenceException
正如标题所说。我在一瞬间得到一个NullReferenceException,在那之后,一切正常。谁能告诉我为什么会这样 这是我的代码,错误来自第43行:Unity3D在瞬间获取NullReferenceException,unity3d,nullreferenceexception,Unity3d,Nullreferenceexception,正如标题所说。我在一瞬间得到一个NullReferenceException,在那之后,一切正常。谁能告诉我为什么会这样 这是我的代码,错误来自第43行: #pragma strict //NOTE: Display the health of the enemy that is targetted by the player! //private var enemyGO : GameObject; //private var enemyScript : EnemyAI; var h
#pragma strict
//NOTE: Display the health of the enemy that is targetted by the player!
//private var enemyGO : GameObject;
//private var enemyScript : EnemyAI;
var healthText : GUIText;
var myPlayer : Transform;
var myPlayerScript : PlayerScript;
var myPlayerTarget : Transform;
var myPlayerTargetScript : EnemyAI;
function Start () {
myPlayer = GameObject.FindGameObjectWithTag("Player").transform;
myPlayerScript = myPlayer.GetComponent("PlayerScript");
/* if (myPlayerScript.target != null) {
myPlayerTarget = myPlayerScript.target;
myPlayerTarget.GetComponent("EnemyAI");
}*/
// enemyGO = GameObject.Find("Enemy");
// enemyScript = enemyGO.GetComponent("EnemyAI");
}
function FixedUpdate () {
if (myPlayerScript.target != null) {
myPlayerTarget = myPlayerScript.target;
myPlayerTargetScript = myPlayerTarget.GetComponent("EnemyAI");
}
}
function OnGUI () {
if (myPlayerScript.target != null) {
GUI.Label (Rect (((Screen.width / 2) + Screen.width / 3), 16, 250, 20), "EnemyHP: " + (Mathf.Round(myPlayerTargetScript.curHealth)) + " / " + /*(Mathf.Round(*/myPlayerTargetScript.maxHealth/*))*/);
}
}
谢谢:)
编辑:这不显示行:p
所以错误发生在GUI.Label中。。。my OnGUI函数中的行:)既然您已经在myPlayerTargetScript中持有对您的EnemyAI脚本的引用,您应该在OnGUI中检查它是否为null 也不要对这些事情使用FixeUpdate。FixeUpdate属于物理系统。只需使用更新即可:
#pragma strict
var healthText : GUIText;
var myPlayer : Transform;
var myPlayerScript : PlayerScript;
var myPlayerTarget : Transform;
var myPlayerTargetScript : EnemyAI;
function Start () {
myPlayer = GameObject.FindGameObjectWithTag("Player").transform;
myPlayerScript = myPlayer.GetComponent(PlayerScript);
}
function Update () {
if (myPlayerScript.target != null) {
myPlayerTarget = myPlayerScript.target;
myPlayerTargetScript = myPlayerTarget.GetComponent(EnemyAI);
}
}
function OnGUI () {
if (myPlayerTargetScript != null) {
GUI.Label (Rect (((Screen.width / 2) + Screen.width / 3), 16, 250, 20), "EnemyHP: " + (Mathf.Round(myPlayerTargetScript.curHealth)) + " / " + myPlayerTargetScript.maxHealth);
}
}
ps:在将脚本发布到这里之前,您应该先整理一下;) 完全错误是什么?OnGUI中有几个变量可能是
null
,具体取决于实现:myPlayerTargetScript
,myPlayerTargetScript.curHealth
,myPlayerTargetScript.maxHealth
啊,很抱歉我忘了,这里是:NullReferenceException:Object reference未设置为对象EnemyHealthScript.OnGUI()的实例(位于Assets/Standard Assets/prefables/Sources/Scripts/EnemyHealthScript.js:43)是的,就像我说的,很可能是myPlayerTargetScript
或其某个字段为空。没有看到你的整个项目,那只是猜测。这可能是因为myPlayerScript
最初没有target
,这将跳过设置myPlayerTargetScript
的可能重复项