0

タイトルの通りです。一瞬 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したがって、OnGUI関数のGUI.Label ...行でエラーが発生しています:)

4

1 に答える 1

0

myPlayerTargetScript で EnemyAI スクリプトへの参照を既に保持しているため、OnGUI で null をチェックする必要があります。

また、そのようなものに FixedUpdate を使用しないでください。FixedUpdate は物理システムに属します。代わりに Update を使用してください。

 #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: ここに投稿する前に、スクリプトを整理する必要があります ;)

于 2013-08-30T00:49:45.677 に答える