Saya mulai mengimplementasikan AI pemain dan musuh dalam sebuah game, tetapi saya bingung tentang cara terbaik mengimplementasikan ini dalam arsitektur game berbasis komponen.
Katakanlah saya memiliki karakter pemain berikut yang bisa diam, berlari dan mengayunkan pedang. Seorang pemain dapat transit ke keadaan pedang ayun baik dari stasioner dan berlari, tetapi kemudian ayunan harus diselesaikan sebelum pemain dapat melanjutkan berdiri atau berlari di sekitar. Selama ayunan, pemain tidak bisa berjalan.
Seperti yang saya lihat, saya memiliki dua pendekatan implementasi:
- Buat komponen AI tunggal yang berisi semua logika pemain (baik dipisahkan dari komponen aktual atau disematkan sebagai komponen PlayerAIC). Saya dapat dengan mudah bagaimana menegakkan pembatasan negara tanpa membuat sambungan antara masing-masing komponen yang membentuk entitas pemain. Namun, komponen AI tidak dapat dipecah. Jika saya memiliki, misalnya, musuh yang hanya bisa berdiri dan berjalan atau hanya berjalan dan sesekali mengayunkan pedang, saya harus membuat komponen AI baru.
- Hancurkan perilaku dalam komponen, masing-masing mengidentifikasi keadaan tertentu. Saya kemudian mendapatkan StandComponent, WalkComponent dan SwingComponent. Untuk menegakkan aturan transisi, saya harus memasangkan setiap komponen. SwingComponent harus menonaktifkan StandComponent dan WalkComponent selama durasi ayunan. Ketika saya memiliki musuh yang hanya berdiri di sekitar, mengayunkan pedang sesekali, saya harus memastikan bahwa SwingComponent hanya menonaktifkan WalkComponent jika ada. Meskipun ini memungkinkan untuk komponen campuran dan pencocokan yang lebih baik, ini dapat mengarah pada mimpi buruk pemeliharaan karena setiap kali ketergantungan ditambahkan, komponen yang ada harus diperbarui untuk bermain dengan baik dengan persyaratan baru tempat ketergantungan tergantung pada karakter.
Situasi yang ideal adalah perancang dapat membangun musuh / pemain baru dengan menyeret komponen ke dalam wadah, tanpa harus menyentuh satu baris pun dari kode mesin atau skrip. Meskipun saya tidak yakin kode skrip dapat dihindari, saya ingin membuatnya sesederhana mungkin.
Ringkasnya: Haruskah saya memasukkan semua logika AI ke dalam satu komponen atau memecah setiap keadaan logika menjadi komponen yang terpisah untuk membuat varian entitas lebih mudah?
sunting : Saya curiga ada beberapa kebingungan tentang apa yang saya maksud dengan situasi pertama dan kedua. Saya sudah mencoba menjelaskannya pada diagram di bawah ini.
Perhatikan hubungan antara masing-masing negara bagian dan entitas. Dalam situasi pertama, komponen AI dibangun sebelum dimasukkan ke dalam entitas. Seorang desainer hanya dapat memilih dari satu set komponen AIC yang berbeda yang disediakan oleh programmer. Situasi kedua memiliki keadaan yang berbeda pada tingkat yang sama dengan komponen lainnya. Seorang desainer sekarang dapat membuat entitas dengan AI unik tanpa campur tangan seorang programmer.
Pertanyaannya adalah, apakah ini satu-satunya dua opsi untuk penataan AI dalam entitas berbasis komponen dan, jika demikian, apa yang akan memberikan fleksibilitas maksimum?