Saya memiliki Health.cs di semua objek enemy saya.

Ketika enemy mendapatkan kerusakan saya ingin mengingatkan ini di kelas yang berbeda. (Tergantung pada jenis enemy)

Jadi di Health.cs saya menambahkan public UnityEngine.Object alertInScript;

Saya mengubah alertInScript melalui Unity Editor. Saya meletakkan di sana kelas yang ingin saya waspadai.

Setiap kelas alertInScript memiliki metode yang sama DamageAlert

Tapi saya tidak bisa menyebutnya, karena c# tidak bisa melihat kelas alertInScript ini sebelum permainan dimulai.

Jadi saya selalu mendapatkan kesalahan.

Saya noobo di c # dan unity, tolong beri tahu saya jika itu mungkin.

Atau bagaimana saya bisa mendapatkan hasil yang sama menggunakan sesuatu yang lain?

enter image description here

0
Arnold 30 Juni 2020, 20:32

1 menjawab

Jawaban Terbaik

Mereferensikan EnemyBear.cs (file kode sumber) bukanlah hal yang sah untuk dilakukan. Jangan pernah lakukan itu, karena mereka dimaksudkan hanya untuk ada sebagai aset sumber (kode) saat berada di Editor. Yang perlu Anda lakukan adalah merujuk Komponen tertentu sebagai gantinya atau menulis kode Anda sehingga komponen tersebut akan ditemukan oleh beberapa pola GetComponent tertentu


Antarmuka adalah cara untuk pergi di sini:

public interface IHealthAlert
{
    void Alert ( Health health );
}

Implementasikan antarmuka seperti ini:

public class AlertedComponent : MonoBehaviour, IHealthAlert
{
    void IHealthAlert.Alert ( Health health)
    {
        Debug.Log( "alerted!" , gameObject );
    }
}

Dan tambahkan AlertedComponent ini di sebelah Health (persis GameObject yang sama)

Kemudian di Health.cs menyebutnya seperti ini:

var components = GetComponents<IHealthAlert>();
foreach( var comp in components )
{
    comp.Alert( this );
}
1
Andrew Łukasik 30 Juni 2020, 18:50