Menandai Objek yang Diinisiasi

Saya mendapatkan "NullReferenceException: Referensi objek tidak disetel ke turunan suatu objek" ketika saya mencoba menandai suatu objek segera setelah saya membuat instance-nya. Objek musuhAnimal telah dibuat (ini adalah prefab yang tampak bagus di layar), tetapi saya tidak boleh mereferensikannya dengan benar, dan saya tidak dapat menemukan cara agar ini berfungsi, atau memberi tag pada objek saat saya membuat instance.

public void placeAnimal()
    {
        GameObject enemy = Instantiate (enemyAnimal, new Vector3 (7, 0, 0), Quaternion.Euler(0, 180, 0)) as GameObject;

        enemy.tag = "EnemyAnimal";
    }

person greyspace    schedule 09.05.2015    source sumber
comment
periksa apakah musuh bernilai nol dengan melakukan if(enemy ==null){ Debug.Log(Enemy is null); } Laporkan kembali kepada saya   -  person Programmer    schedule 10.05.2015
comment
@Programmer Ini nol (Saya baru saja memeriksa seperti yang Anda minta), tetapi saya tidak mengerti bagaimana hal itu mungkin karena saya dapat dengan jelas melihat musuhAnimal yang dipakai dalam adegan, dan ini adalah baris kode berikutnya setelah musuhAnimal ditempatkan .   -  person greyspace    schedule 10.05.2015
comment
Itulah masalahnya. Bisakah Anda memposting kode tentang bagaimana musuhAnimal didefinisikan   -  person Programmer    schedule 10.05.2015


Jawaban (1)


Saya pikir enemy bukan objek permainan, dan ketika Anda mencoba melemparkannya ke sana, tentu saja Anda mendapatkan nol. Apakah ini perilaku mono? Transmisikan ke tipe aslinya (sama dengan enemyAnimal yang didefinisikan) dan gunakan properti gameObject:

public void placeAnimal()
{
    var enemy = Instantiate (enemyAnimal, new Vector3 (7, 0, 0), Quaternion.Euler(0, 180, 0)) as MonoBehaviour;
    enemy.gameObject.tag = "EnemyAnimal";
}
person Max Yankov    schedule 09.05.2015
comment
Saya mengira semuanya adalah GameObject (semuanya diwarisi dari GameObject) karena berapa kali saya menyetel variabel ke GameObject dan itu memungkinkan saya memasukkan apa pun ke dalamnya. Tapi Anda benar sekali. Ketika saya mengubahnya menjadi tipe Hewan, itu berhasil. Terima kasih banyak! - person greyspace; 10.05.2015
comment
Semuanya bukanlah objek permainan. Setiap entitas C# berasal dari kelas System.Object, dan semua Unity berasal dari kelas UnityEngine.Object (yang juga merupakan turunan dari System.Object. Namun, MonoBehaviour bukan objek permainan. Saya pikir ini mungkin membantu Anda memahami hubungan antara perilaku mono dan komponen lebih baik: gameprogrammingpatterns.com/component.html - person Max Yankov; 10.05.2015
comment
Luar biasa. Terima kasih banyak. Saya rasa, saya tidak memiliki reputasi yang cukup untuk melakukan apa pun selain menandai ini sebagai telah dijawab, tetapi saya sangat menghargai bantuan dan tautannya. Saya sedang mendalaminya sekarang. - person greyspace; 10.05.2015
comment
Aku akan melakukannya untukmu. +1 - person Programmer; 10.05.2015