pohon perilaku godot
Implementasi GDScript dari pohon perilaku untuk AI game, berdasarkan node Godot asli dan menggunakan editor pohon adegan bawaan.
VERSI C# -> https://github.com/MadFlyFish/godot-behavior-tree-csharp
INSTALASI
- Salin folder 'addons' ke direktori utama proyek Anda.
- Aktifkan plugin dari pengaturan proyek, LALU RESTART Godot, jika tidak maka plugin tidak akan mengenali kelas baru (itu adalah bug mesin).
- Secara opsional, Anda juga dapat menyeret folder bt_example ke direktori utama proyek Anda.
- Untuk melihat contoh berfungsi, jalankan adegan agent.tscn. Adegan ex_behavior_tree.tscn adalah contoh bagaimana pohon dibangun.
PETUNJUK:
- Klik ikon pembuatan simpul. Anda akan melihat node baru tersedia (jika tidak, restart Godot). Anda harus menggunakan BehaviorTree sebagai simpul akar, yang seharusnya hanya memiliki satu anak. Anak ini dapat berupa node mana pun dalam kategori BTNode, yang semuanya mewarisi kelas BTNode.
- Setelah membuat pohon perilaku, Anda harus menentukan siapa pemilik AI (Agen) dan Blackboard apa yang digunakan. Papan tulis dapat diletakkan di mana saja (mengingat di luar pohon), dan bahkan dibagikan di antara pohon-pohon yang berbeda. Sistem ini cukup fleksibel untuk memungkinkan Anda memutuskan bagaimana dan kapan memperbarui data papan tulis Anda. Misalnya, Anda dapat membuat Node biasa dengan skrip yang menangani pembaruan papan tulis, misalnya. dengan panggilan balik sinyal atau bahkan dalam proses(). Atau Anda dapat melakukannya dari mana saja, bahkan dari dalam pohon, pastikan untuk merancang segala sesuatunya sedemikian rupa sehingga Anda dapat memelihara dan memantaunya.
- Aliran Pohon Perilaku mengeksekusi masing-masing turunannya, yang mengembalikan beberapa jenis status keberhasilan atau kegagalan. Hanya cabang-cabang yang mengikuti node sukses yang akan dieksekusi. BTNode harus mengembalikan keberhasilan atau kegagalan, dan dapat menunda eksekusi hanya dengan panggilan yield(), setelah itu akan tetap dalam keadaan berjalan hingga eksekusi selesai. Ketika BTNode dalam keadaan berjalan, pohon akan menunda eksekusi secara bertahap (dengan satu-satunya pengecualian adalah BTParallel ) hingga semua turunan menyelesaikan eksekusi. Ini untuk tujuan optimasi.
- Aliran pohon ditentukan oleh apa yang disebut node komposit: BTSequence, BTSelector, BTRandomSelector, BTRandomSequence, BTParallel yang semuanya mewarisi dari BTComposite. Urutan berhasil jika semua anak berhasil, dan gagal jika salah satu anak gagal. Pemilih adalah kebalikan logisnya, ia berhasil jika satu anak berhasil, dan gagal jika semua anak gagal. Sebuah paralel akan dijalankan oleh semua anak dan selalu berhasil, TANPA menunggu anak menyelesaikan eksekusi. Node komposit dasar menjalankan semua turunan dan selalu berhasil, tetapi juga menunggu penyelesaian eksekusi.
- Tindakan perilaku AI Anda dilakukan di node BTLeaf. Tambahkan BTLeaf, lalu lakukan 'perluas skrip'. Sekarang Anda dapat menentukan perilaku Anda sendiri dalam skrip ini dengan mengganti metode _ tick() . Tindakan Anda akan mengarah ke sini. Pastikan untuk membaca komentar di skrip dasar untuk mengetahui praktik terbaik. Ingat juga BTLeaf tidak boleh memiliki anak.
- BTDecorator digunakan untuk menyesuaikan eksekusi node anak. Mereka hanya dapat memiliki SATU anak.
- BTConditional adalah jenis dekorator yang paling umum. Tambahkan BTConditional dan perluas skrip, lalu ganti metode _ pre_tick() untuk menentukan kondisi di mana anak akan dieksekusi. Pastikan Anda membaca komentar karena ada contoh berguna di sana.
- BTGuards adalah dekorator yang dapat digunakan untuk mengunci cabang sementara. Secara opsional, Anda dapat menetapkan pembuka kunci, yang akan mengesampingkan waktu penguncian yang ditentukan. Ada juga pilihan untuk menetapkan loker. BTGuards dapat menjadikan perilaku Anda sangat kaya dan reaktif, serta dioptimalkan, karena menghindari percabangan dan pengulangan yang tidak perlu.
- Dekorator lain memungkinkan Anda mengulang eksekusi, membalikkan hasil centang, dan sebagainya. Ada banyak hal yang dapat Anda lakukan dengan menyesuaikan eksekusi melalui dekorator.
- Praktik yang baik adalah dengan menggunakan node yang disediakan dan mengikuti pola desain pohon perilaku. Namun karena ini murni implementasi berbasis kode tanpa editor visual apa pun, Anda memiliki banyak kendali atas desain dan dengan demikian memiliki margin kesalahan. Ini hanyalah skrip berguna yang mengikuti beberapa "praktik baik" namun tidak terikat padanya, jika bukan karena beberapa aturan dasar. Terserah Anda untuk memutuskan bagaimana merancang pohon perilaku Anda, namun perlu diingat bahwa jika Anda menyalahgunakannya, Anda tidak akan mendapatkan manfaat dari kekuatan pola pohon perilaku. (misalnya, Anda bahkan dapat menggunakan BTNode dasar untuk semuanya dan hanya memperluasnya setiap saat, meskipun akan berantakan)
- Anda dapat memiliki pohon perilaku yang sangat besar, namun praktik terbaiknya adalah mengikuti filosofi komponen Godot dan membuat beberapa pohon perilaku yang lebih kecil untuk setiap komponen adegan Anda. Misalnya, pohon untuk pengontrol gerakan Anda, pohon untuk pengontrol senjata Anda, pohon untuk komponen pathfinder Anda, dll. Pohon perilaku hanya dapat memiliki satu papan tulis, namun papan tulis yang sama dapat digunakan oleh banyak pohon, jadi ini adalah sangat berguna jika Anda ingin memiliki beberapa pohon tanpa membuat banyak papan tulis. Secara pribadi, alasan mengapa saya memiliki papan tulis sebagai komponen yang dipisahkan, adalah karena saya ingin membuat pasukan musuh berbagi data yang sama tetapi berperilaku independen, jadi ini adalah kasus penggunaan untuk ini. Selain itu, saya biasanya memiliki beberapa komponen di aktor saya, dan saya ingin menggunakan database yang sama untuk pohon yang berbeda.