新しいオブジェクトは、一度ヒットしたオブジェクトを破棄してインスタンス化します。オブジェクトは正しい場所と正しい振る舞いでインスタンス化されますが、スクリプトに書き込んだとしても、新しいオブジェクトへの参照は更新されません。新しいオブジェクトがインスタンス化された後にオブジェクト参照が更新されない
衝突イベント:
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;
}
Respawn();関数コード – Programmer
'GameObject.Instantiate(Object、Vector3.zero、Quaternion.identity);'?そのコードはコンパイルすべきではありません。私は、あなたが何をインスタンス化しているのか、そのオブジェクトがどのように宣言されているのかを知りたい。これはプレハブですか?コードをもう一度更新してください。 – Programmer
私は公開ゲームプレイヤーを使用してプレハブを1つで参照します – geolaw