Pendekatan pengembangan berbasis peristiwa memungkinkan Anda untuk secara alami mengisolasi implementasi logika bisnis aplikasi dari antarmuka pengguna. Sebagai pengembang Unity yang lebih, saya akan mendemonstrasikan semuanya dalam konteks pengembangan game. Dalam artikel terakhir , saya menunjukkan bagaimana mesin negara dapat mengatur logika bisnis dalam bentuk sistem negara dengan perilaku yang terdefinisi dengan baik. Hari ini saya ingin memperhatikan bagaimana robot harus berinteraksi dengan objek game dan mengontrol keadaan adegan.
Dalam contoh di artikel tentang automata, saya menggunakan konstruksi berikut:
Game.Event.Invoke("joystick_updated", input);
Dengan struktur pemanggilan fungsi, Anda dapat memahami bahwa ada beberapa kelas Game statis yang menyediakan akses global ke bidangnya, yang sangat nyaman untuk ukuran proyek kecil. Ini dia sebagian isinya:
public static class Game
{
public static FSM Fsm = new FSM();
public static EventManager Event = new EventManager();
public static ObservableData Data = new ObservableData();
...
Dalam contoh ini, Anda dapat melihat beberapa kebebasan dalam detail implementasi. Saat menskalakan proyek, misalnya, Anda harus meninggalkan konteks statis dan, berdasarkan kelas Game , mengimplementasikan komponen, menyebutnya dengan sok MonoBehaviourPro dengan struktur serupa untuk subsistem kompleks, dan meneruskannya sebagai konteks ke otomat dan komponen subsistem tersebut. Saya sengaja menghaluskan sudut-sudut ini untuk kejelasan contoh yang lebih baik. Hari ini kita akan melihat kelas dengan nama EventManager yang sudah lama menderita , karena ini adalah dependensi ObservableData dan tanpanya kita tidak bisa melanjutkan. The Link menunjukkan implementasi lengkap dari EventManager kelas ., prinsip operasinya sangat sederhana. Kami menyimpan daftar delegasi dengan tanda tangan arbitrer yang berlangganan acara dengan kunci string.
, Generic-, Type safety. , . , , EventManager binds binds_global . , Unity. , , . , . Awake OnDestroy. binds, . . , , - . , " " , Global.
, EventManager c 5 :
public void Bind<T>(string name, Action<T> ev)
public void BindGlobal<T>(string name, Action<T> ev)
public void Unbind<T>(string name, Action<T> ev)
public void UnbindGlobal<T>(string name, Action<T> ev)
public void Bind(string name, Action ev)
public void BindGlobal(string name, Action ev)
public void Unbind(string name, Action ev)
public void UnbindGlobal(string name, Action ev)
public void Invoke<T>(string name, T arg)
public void Invoke(string name)
. . FSM , , EventManager , , ( MonoBehaviourPro, PlayerController, , SPlayerDriving , , , SPlayerClimbing, , , . , ). , SWin level_done, , , .
, , - , , , - PlayerPrefs, . .
Dengan demikian, otomat dalam pekerjaannya dapat mengirim acara ke objek yang berlangganan melalui EventManager. Pada artikel berikutnya, saya akan membahas kemampuan yang disediakan oleh kelas ObservableData bersama dengan alat yang dijelaskan.
Artikel ini adalah yang kedua dalam seri: