Saat ini, saya mensimulasikan kekuatan dampak fisika untuk penghindaran lokal unit tetapi metode ini kadang-kadang mendorong unit keluar dari formasi dan memiliki efek yang sangat tidak diinginkan ketika unit menggumpal.
Untuk game RTS seperti Starcraft 2, bagaimana penghindaran lokal dilakukan? Apakah fisika disimulasikan atau pengontrol omnicient memutuskan di mana semuanya seharusnya? Saya tahu pertanyaan ini mungkin sedikit luas, jadi saya bertanya secara spesifik bagaimana cara mencapai perilaku penghindaran lokal Starcraft 2; meskipun apa pun yang bekerja akan sangat dihargai.
Saya tidak mencari kode apa pun - hanya sumber daya yang berguna atau penjelasan tentang bagaimana Starcraft 2 (atau game serupa) menangani penghindaran lokal.
Saat ini, saya memiliki deteksi tabrakan (dengan vektor penetrasi), gaya tabrakan, dan gerakan dengan kecepatan diimplementasikan. Setiap unit diperiksa terhadap yang lain untuk tabrakan - jika mereka bertabrakan, objek segera diimbangi oleh vektor penetrasi maka gaya tabrakan diterapkan. Kemudian loop lain menggerakkan objek dengan kecepatannya dan menerapkan gaya tarik ke kecepatan. Offset ini mengurangi masalah gaya tabrakan yang berlebihan yang diterapkan pada unit bergerombol, tetapi unit kadang-kadang masih menembak.
Solusi yang saya cari perlu memenuhi persyaratan berikut (seperti dalam Starcraft 2):
- Objek tidak tumpang tindih; atau setidaknya tumpang tindih akhirnya harus diselesaikan.
- Objek tidak mendorong satu sama lain lebih dari yang diperlukan sehingga 2 unit dapat berdiri dan bergerak bersebelahan dalam suatu formasi.
- Seharusnya tidak ada perilaku aneh ketika benda-benda menggumpal ke arah tujuan yang sama.
- Dapat mendukung unit dengan ukuran yang berbeda, dan bahkan bentuk cembung yang berbeda.
Apa yang saya pikirkan sejauh ini adalah bukannya mendeteksi tabrakan, mendeteksi tabrakan di masa depan sehingga tumpang tindih tidak pernah terjadi. Kemudian terapkan kendala, pastikan kecepatan 2 unit tidak menyebabkan mereka tumpang tindih. Saya masih mengutak-atik algoritma untuk membatasi gerakan di luar tumpang tindih.