2016-04-09 13 views
0

新しいオブジェクトは、一度ヒットしたオブジェクトを破棄してインスタンス化します。オブジェクトは正しい場所と正しい振る舞いでインスタンス化されますが、スクリプトに書き込んだとしても、新しいオブジェクトへの参照は更新されません。新しいオブジェクトがインスタンス化された後にオブジェクト参照が更新されない

衝突イベント:

void OnTriggerExit2D(Collider2D other) 
{ 
    if (other.GetComponent<Rigidbody2D>() == projectile) 
    { 
     Respawn(); 
     Ammo -= 1; 
     SetAmmoCount(); 
     Destroy(GO); 
     UpdateReferences(); 
    } 
} 

UpdateReferences方法:

void UpdateReferences() 
{ 
    projectile = GameObject.FindGameObjectWithTag("Damager").GetComponent<Rigidbody2D>(); 
    tran = GameObject.FindGameObjectWithTag("Damager").GetComponent<Transform>(); 
    GO = GameObject.FindGameObjectWithTag("Damager"); 
} 

毎回私は新しいオブジェクトを見つけることができるとは思われないゲームを実行します。しかし、私は同じオブジェクトの他のスクリプトでオブジェクト参照を更新するこのメソッドを使用して、うまくいきました。私が間違っていることを確認していない。

復活方法:それは私がオブジェクトや物事を参照するためにいくつかの悪い名前を使用コンパイル

void Respawn() 
{ 
    GameObject.Instantiate(player, Vector3.zero, Quaternion.identity); 

    projectile.isKinematic = true; 
    isSpawned = true; 
} 

。はい、インスタンス化するオブジェクトはプレハブです。だから、もう少し、それは私が前に持っていた問題について私に起こったDestroy()に読んだ後

void Respawn() 
{ 
    GameObject obj = GameObject.Instantiate(player, Vector3.zero, Quaternion.identity) as GameObject; 
    obj.tag = "Damager"; 
    projectile.isKinematic = true; 
    isSpawned = true; 
} 
+0

Respawn();関数コード – Programmer

+0

'GameObject.Instantiate(Object、Vector3.zero、Quaternion.identity);'?そのコードはコンパイルすべきではありません。私は、あなたが何をインスタンス化しているのか、そのオブジェクトがどのように宣言されているのかを知りたい。これはプレハブですか?コードをもう一度更新してください。 – Programmer

+0

私は公開ゲームプレイヤーを使用してプレハブを1つで参照します – geolaw

答えて

0

+0

私はそれについて考えましたが、私はGOが何であるかは分かりませんでした。あなたが自分でそれを理解した素晴らしいこと。 – Programmer

+0

名前を付けることは、私がうまくいかないことです。関係なく、助けてくれてありがとう。 – geolaw

0

はであなたの復活の機能を交換してください。 Destroy()を使用すると、実際にそのオブジェクトへの参照も破棄されます。したがって、新しいコピーを作成しようとするときに問題を作成し、その代わりに参照を移動します。あなたが使用する必要があるのはGameObject.SetActive()であり、リファレンスはすべて上記の私の質問のリファレンスアップデートと新しいインスタンスのインスタンスに更新されます。

+0

です。同じ問題ですが、参照が更新されない – geolaw

関連する問題