Saya sedang menulis game (platformer 2D) dan saya mencoba membuat musuh respawn saat pemain respawn. Saya tidak bisa memuat ulang level begitu saja karena saya memiliki beberapa objek yang dimuat saat level dimuat, sehingga akan menyebabkan beberapa masalah. Sebagai gantinya, untuk menghidupkan kembali pemain, saya mengembalikannya ke lokasi awalnya (dan saya menangani nyawa yang hilang dan detail lainnya).
Seorang pemain menghancurkan musuh dengan memukul kepalanya, sebagai berikut (di OnTriggerEnter pada pemain):
if(otherObject.CompareTag("Minion")) //hit by minion
{
if(hitFromTop(otherObject.gameObject)) //if player jumped on enemy
{
otherObject.GetComponent<Minion>().setMoving(false); //stop moving
playSound(KillEnemySound); //play killing enemy sound
jump();
Destroy(otherObject.gameObject); //kill minion
}
//else hurt player
}
Seperti yang Anda lihat, saya menghancurkan objek musuh sepenuhnya. Untuk mengetahui musuh mana yang berada, saya menambahkan mereka ke daftar (disimpan dalam GameObject terpisah) saat pembuatan. Daftar ini dibuat di objek respawning musuh yang terpisah, sebagai berikut:
void Start ()
{
enemyList = GameObject.FindGameObjectsWithTag("Minion");
Debug.Log ("Adding all minions to list");
}
Saya mencoba memanggil fungsi yang memunculkan kembali semua minion dalam daftar di lokasi aslinya dengan menelusuri daftar. Fungsinya adalah sebagai berikut:
public void RespawnAll()
{
foreach(GameObject minion in enemyList)
{
Destroy(minion); //make sure to respawn ALL minions
}
Debug.Log ("Respawning all");
foreach(GameObject minion in enemyList)
{
Debug.Log ("instantiating minions from list");
Instantiate (minion, minion.GetComponent<Minion>().origPosition, Quaternion.identity);
}
}
Saya tahu bahwa ini bukanlah metode yang paling optimal dalam hal waktu untuk menghapus semua musuh dan memunculkan kembali semuanya, dan jika logika ini salah atau jika Anda tahu cara yang lebih baik, saya terbuka untuk ide-ide baru.
Masalah dengan ide ini adalah, saya mendapatkan kesalahan:
MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
Sepertinya saya menambahkan referensi ke minion yang ada ke dalam daftar daripada salinannya. Bagaimana caranya agar musuh bisa respawn dengan baik, pada posisi semula?
enemylist
Anda dapat memilikienemyposition
atau daftar serupa yang menyimpan sesuatu seperti Vector3 atau kelas khusus yang berisi informasi musuh yang relevan seperti kehidupan awal, posisi, orientasi, dll. - person Jerdak   schedule 21.04.2013