Saya ingin cara untuk membuat banyak unit berbeda tanpa harus memprogram hal-hal seperti tindakan moveTo dan Attack lebih dari sekali
Cara saya melihatnya, ada 2 cara saya bisa melakukan ini.
- Kelas Unit generik tunggal dengan flag yang menentukan apa yang bisa / tidak bisa dilakukan (kemudian buat instance dalam array statis dan ambil ketika diperlukan)
- Abstrak unit class dengan metode abstrak untuk aksi spesifik Unit seperti (Attack, Harvest, Patrol), yang kemudian semua perlu diimplementasikan dalam subclass , bahkan jika unit tidak dapat benar-benar memanen apa pun.
cara pertama melakukan ini tampaknya yang paling sederhana, tetapi saya akan berakhir memiliki banyak kode yang tidak digunakan untuk sebagian besar unit.
cara kedua juga bisa berhasil. Tetapi jika saya memutuskan untuk memiliki dua unit berbeda yang dapat memanen sumber daya, saya akan memiliki kode yang sama persis di dua kelas yang berbeda, yang sepertinya bukan cara yang tepat untuk melakukannya.
Apakah ini bahkan pendekatan yang tepat untuk masalah ini?
Dalam permainan seperti AoE, setiap unit memiliki, apa yang saya anggap adalah, semacam Daftar Tindakan / Pesanan, saya benar-benar ingin tahu bagaimana mencapai sesuatu yang mirip dengan itu, di mana saya bisa mengkodekan setiap Aksi / Pesanan satu kali, dan kemudian berikan ke semua unit yang perlu diucapkan Action.
Jika saya tidak jelas (sangat masuk akal) atau Anda memerlukan informasi lebih lanjut tentang apa yang sebenarnya saya cari, tanyakan saja kepada saya dalam komentar.
sumber
gameObject.AddComponent
dangameObject.RemoveComponent
.Moving
berarti komponen "unit ini umumnya mampu gerakan". Komponen terpasang secara permanen padanya, terlepas dari apakah unit bergerak atau tidak. Itu tidak berarti bergerak sekarang . Meskipun Anda juga bisa melakukannya dengan cara menambahkanMoveOrder
komponen ke dalamnya dan meminta komponen itu menghapus sendiri dari unit ketika pesanan dipenuhi atau dibatalkan.Banyak gim menggunakan sistem berbasis komponen untuk entitas yang merupakan tempat sekelompok perilaku dan kemampuan dapat ditambahkan ke tipe unit yang lebih umum daripada dikodekan sebagai bagian dari kelas entitas (atau yang setara).
sumber
Unity
bendera. Unity sudah memiliki sistem komponen bawaan, dan sangat menyukai komposisi daripada warisan . Salah satu metode langsung adalah membuatMonoBehaviour
untuk masing-masing jenis tindakan Anda, kemudian melampirkan ke setiap jenis unit cetakan tindakan yang dapat dilakukan (menyesuaikan contoh tindakan dengan detail per-jenis seperti nilai & biaya kerusakan). Ini membuat data unit Anda tetap digerakkan, sehingga Anda dapat dengan mudah membuat banyak tipe unit kustom.