Unity3D在瞬间获取NullReferenceException

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

正如标题所说。我在一瞬间得到一个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 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
的可能重复项