Game AI Smart NPC
Game AI Smart NPC
Source code: https://github.com/wewnumam/GameAISmartNPC
Mata Kuliah Game Artificial Intelligence Semester 5 Prodi Teknologi Permainan STMM MMTC Yogyakarta 2023
Latar Belakang
Game ini merupakan game populer yang biasa dikenal sebagai "tactical shooter". "Tactical shooter adalah genre permainan video yang menekankan strategi, kerjasama tim, dan taktik dalam penggunaan senjata untuk mencapai tujuan permainan. Pengembangan game ini terinspirasi dari game Counter Strike dimana player menjadi counter terorist yang menyelamatkan sandera. Beberapa bertimbangan kami memilih game ini sebagai berikut:
- Gameplay lebih umum/mudah dipahami dibanding game lain
- Melibatkan jumlah NPC yang banyak dan aktif bergerak
Konsep
Elemen | Deskripsi |
---|---|
Goals | Menyelamatkan sandra dan membawanya ke markas pemain. |
Interaction | Third person control (WASD & Mouse). |
Obstacle | Terorist akan berpatroli dan mengumpulkan sandera ke markasnya. Terroist menyerang pemain jika pemain berada didekatnya. |
Rules | Pemain harus menyelamatkan seluruh sandera. |
Teknologi yang Digunakan
- Unity, Merupakan lingkungan pengembangan perangkat lunak dan game engine yang memungkinkan pembuat game untuk membuat, mengelola, dan merancang aplikasi berbasis 2D maupun 3D.
- MonsterLove StateMachine, Merupakan plugin untuk Unity yang menyediakan Finite State Machine (FSM) untuk membantu pengembang mengatur logika perpindahan keadaan dalam game dengan lebih terstruktur.
- Behavior Bricks, Merupakan alat visual scripting di Unity yang memfasilitasi pengembangan game dengan memungkinkan pengembang untuk merancang logika gameplay menggunakan blok-blok visual dan menghubungkannya secara intuitif.
- Starter Assets - Third Person Character Controller, Adalah sebuah paket asset di Unity yang menyediakan karakter pengendali pihak ketiga (third-person) sebagai dasar untuk pengembangan game, termasuk kontrol karakter, animasi, dan fitur-fitur dasar lainnya.
Behavior hostage (FSM):
- Ketika berada di dekat markas pemain, mereka akan menuju markas pemain.
- Ketika berada di dekat markas teroris, mereka akan menuju markas teroris.
- Jika berada di dekat teroris, mereka akan mengikuti teroris.
- Jika berada di dekat pemain, mereka akan mengikuti pemain.
- Jika tidak ada pemain atau teroris di sekitar mereka, mereka akan menuju area perlindungan terdekat.
Perilaku sandera dikendalikan oleh sebuah finite state machine atau FSM yang diimplementasikan menggunakan library MonsterLove.StateMachine
di Unity. FSM mengelola berbagai keadaan seperti inisialisasi, idle, dan mengikuti target.
Mari kita bahas komponen-komponen kunci dari kode tersebut:
Serialized Fields:
[SerializeField] private NavMeshAgent agent; [SerializeField] private float maxFollowDistance = 10f;
Bidang ini diserialkan dan diekspos di Unity Inspector.
NavMeshAgent
adalah komponen untuk pencarian jalur dan navigasi pada permukaan NavMesh.maxFollowDistance
adalah jarak maksimum di dalamnya sandera akan mengikuti target.Private Fields:
private Transform target; private bool isAtHQ;
target
adalah referensi ke target saat ini yang sedang diikuti sandera, danisAtHQ
adalah bendera boolean yang menunjukkan apakah sandera berada di markas besar.Nested Class
Driver
:public class Driver { public StateEvent Update; public StateEvent<collider> OnTriggerEnter; }
Kelas bersarang ini mendefinisikan peristiwa (
Update
danOnTriggerEnter
) yang akan digunakan oleh state machine untuk berpindah antar keadaan.Enum
States
:public enum States { Init, Idle, FollowTarget }
Enum ini mendefinisikan keadaan-keadaan yang mungkin dari state machine terbatas:
Init
,Idle
, danFollowTarget
.Inisialisasi State Machine:
StateMachine<States, Driver> fsm; private void Awake() { fsm = new StateMachine<States, Driver>(this); fsm.ChangeState(States.Init); }
State machine diinisialisasi di dalam method
Awake
dengan keadaan awal diatur keInit
.Method Update:
private void Update() { fsm.Driver.Update.Invoke(); }
Method
Update
dari state machine dipanggil di dalam lingkaranUpdate
Unity.Method OnTriggerEnter:
private void OnTriggerEnter(Collider collider) { // ... (Lihat kondisi if untuk peralihan keadaan) fsm.Driver.OnTriggerEnter.Invoke(collider); }
Method ini dipanggil ketika
Collider
sandera berinteraksi dengan collider lain. Bergantung pada tag collider, state machine berpindah ke keadaan yang berbeda.Method FollowTarget_Enter dan FollowTarget_Update:
private void FollowTarget_Enter() { // ... (Lihat kondisi untuk masuk ke keadaan FollowTarget) } private void FollowTarget_Update() { // ... (Lihat kondisi untuk memperbarui keadaan FollowTarget) }
Method ini khusus untuk keadaan
FollowTarget
.FollowTarget_Enter
dipanggil saat memasuki keadaan, danFollowTarget_Update
dipanggil selama keadaan untuk menangani perilaku tertentu, seperti menetapkan tujuan untukNavMeshAgent
dan memeriksa apakah target berada dalam jarak tertentu.Method Idle_Enter:
private void Idle_Enter() { target = null; agent.ResetPath(); }
Method ini dipanggil saat memasuki keadaan
Idle
. Ini mengatur kembali target menjadi null dan membersihkan jalurNavMeshAgent
.
Secara keseluruhan, skrip ini menunjukkan penggunaan state machine terbatas untuk mengontrol perilaku objek permainan sandera di Unity. Sandera dapat berada dalam keadaan awal, keadaan idle, atau mengikuti target berdasarkan interaksi dengan objek permainan lain.
Behavior terorist (Behavior Tree):
- Mereka akan menyerang pemain jika berada di dekat pemain.
- Jika berada di dekat sandera, mereka akan menculik sandera dan membawanya kembali ke markas teroris.
- Jika sudah mencapai markas teroris, mereka akan melakukan patroli.
Gameplay
Status | Released |
Platforms | HTML5 |
Author | Ahmad Adillaumam |
Made with | Unity |
Leave a comment
Log in with itch.io to leave a comment.