2016-04-01 7 views
2

私は学校のための基本的なゲームを作っています。オブジェクトを破棄すると、私は無限ループが発生します

(敵の)次のアップデート方法では、PlayerHealthスクリプトからブール値を取得しています。

健康状態が悪くなったら、私はgameObject Playerを破壊します。 それゆえ、(敵の)私の更新メソッドは、破壊された私のplayerObjectを検索してループを続けます。

この問題の解決方法はわかりません。私はif/else文がうまくいくことを期待していましたが、そうではありません。

void Update() 
{ 
    if (!GameObject.Find("Player").GetComponent <PlayerHealth>().deadPlayer) //false --> Chase 
    { 
     transform.position = Vector3.MoveTowards(transform.position, player.transform.position, chaseSpeed); //move towards character 
    } else 
    { 
     transform.position = transform.position; 
    } 
} 

いくつかの余分な情報:

は、これは私が

Object reference not set to an instance of an object 

を取得していますエラーですしかし、私はplayerObjectがもう存在しないので、それはありません知っています。ダブルクリックすると

if (!GameObject.Find("Player").GetComponent <PlayerHealth>().deadPlayer) //false --> Chase 

誰かに助けてもらえますか?私は、値をtrueに変更

スクリプト:

if (currentHealth <= 0) 
{ 
    deadPlayer = true; 
    Destroy(gameObject); 
} 
+0

プレーヤーオブジェクトを取得してから、そのヘルスコンポーネントにアクセスしようとしています。あなたがプレーヤーを破壊すると、あなたは何かの健康成分を得ることができません。そのため、自分のヘルスコンポーネントにアクセスする前に、有効なプレーヤーオブジェクトを確実に取得する必要があります。 – ManoDestra

答えて

4

プレイヤーが存在する場合、あなただけチェックしていないのはなぜ? if (GameObject.Find("Player") != null)

オブジェクトを破棄した場合、そのオブジェクトのコンポーネントにアクセスすることはできません。

+0

ありがとう!なぜ私はそれを考えなかったのですか:/ –

+0

9分で受け入れることができます –

+0

@MeindertStijfhals ye、心配しないでください。 Fwiw、私が最初に始めたとき、私はこのミスを数回しました。 –

関連する問題