Dari apa yang saya pahami tentang Behavior Trees, setiap Perilaku harus menjadi Aksi berorientasi tujuan singkat yang dapat dilakukan dalam beberapa iterasi.
Jadi misalnya, di bawah ini adalah gambar dari Behavior Tree:
Sekarang mari kita asumsikan bahwa perilaku Drive To Enemy membutuhkan lebih dari beberapa iterasi di pohon. Jadi pada setiap pass Drive To Enemy dipanggil karena sekarang dalam keadaan berjalan .
Masalahnya adalah saya ingin memanggil Menghindar Musuh jika Musuh ada di dekatnya. Dan mengingat bahwa Drive To Enemy selalu dipanggil, aku tidak pernah mendapat kesempatan untuk memanggil Evade Enemy ( Mungkin harus disebut Avoid Enemy ).
- Haruskah saya melintasi Tree EACH pass tidak peduli apa tindakan yang sedang berjalan?
- Apakah saya melakukan ini dengan cara yang benar?
- Apa cara yang tepat untuk menangani perilaku semacam itu?
Awalnya ditanyakan pada Stackoverflow. Pemikiran di sini akan menjadi tempat yang lebih tepat untuk mengajukan pertanyaan ini.
Jawaban:
Lihat gambar yang saya berikan di jawaban saya sebelumnya :
Jika Anda membayangkan bahwa simpul 1 adalah 'Menghindar Musuh' dan simpul 2 adalah 'Mengejar Musuh', Anda akan melihat bahwa meskipun dalam iterasi kedua (ketika semuanya berwarna hijau kecuali untuk '2' dan 'B' adalah ketika iterasi kedua dimulai), 'Evade Enemy' masih diperiksa terlebih dahulu. Hanya ketika 'Evade Enemy' gagal, karena tidak ada musuh di dekatnya, 'Chase Enemy' diaktifkan kembali. Ketika 'Chase Enemy' dikunjungi lagi, ia mengetahui bahwa itu dalam keadaan 'berjalan' dan melompat langsung ke 'B'.
Ini berarti bahwa setiap kali pohon diperiksa, ia akan selalu melintasi kiri ke kanan. Bahkan ketika sebuah node ditandai berjalan, node dengan prioritas lebih tinggi masih diperiksa terlebih dahulu.
Saya tidak yakin apakah Anda bermaksud untuk memproses node Anda dari kanan ke kiri, tetapi itulah yang tampaknya Anda atur (mis. Di bawah menghindari musuh, cari musuh ada di kanan drive di arah yang berlawanan). Jika Anda membutuhkan penjelasan lebih lanjut, Anda harus bertanya dalam obrolan atau dalam salah satu pertanyaan yang ada tentang topik tersebut.
sumber