Jadi: permainan top-down, musuh saya mengejar pemain, ketika mereka berada dalam jarak tertentu mereka berdiri diam dan menembak. Jika mereka semua datang dari arah yang sama, mereka semua akhirnya berdiri di tempat yang sama (yaitu berdiri "di dalam" satu sama lain), karena saya saat ini tidak melakukan deteksi tabrakan antara musuh - mereka bebas untuk saling melewati.
Apa cara sederhana ini? Apakah beberapa bentuk deteksi tabrakan atau ai?
ai
collision-detection
Iain
sumber
sumber
Jawaban:
Anda tidak perlu deteksi tabrakan, tetapi Anda harus memberikan sedikit kecerdasan kepada musuh Anda, dan minta mereka menghindari saling bertabrakan. Deteksi tabrakan tanpa itu hanya akan membuat musuh Anda terlihat bodoh - orang saling menghindari, mereka biasanya tidak bertabrakan.
Carilah "berkelompok" untuk beberapa perilaku sederhana.
Ide dasarnya adalah bahwa segala sesuatunya harus menuju pemain, tetapi menjauh dari rintangan yang dekat (satu sama lain, dinding, hal semacam itu).
sumber
Anda dapat menginspirasi diri sendiri tentang perilaku berkelompok , seperti Boids .
Ini cenderung terdiri atas 3-4 aturan yang sangat sederhana yang, diterapkan dengan benar, menghasilkan perilaku yang sangat memuaskan dan "tampak rumit".
Dalam kasus Anda, Anda dapat mencoba sesuatu seperti ini:
sumber
Apa yang Anda tanyakan secara umum adalah penghindaran dinamis antara aktor. Anda bisa melihat hambatan kecepatan: http://gamma.cs.unc.edu/RVO/
sumber
Anda mungkin ingin memeriksa difusi kolaboratif (animasi hebat di sini) atau beberapa jenis pola anti-objek untuk pergerakan. Meskipun algoritma difusi itu sendiri mungkin tidak menghentikan musuh untuk menyeberang, Anda dapat menambahkan kendala tambahan untuk membuatnya tidak mungkin atau tidak mungkin.
sumber
Bagaimana jika Anda melarang bergerak melalui unit lain? Menurut saya, Anda akan membutuhkannya cepat atau lambat. Setiap kali jalur saat ini diblokir oleh sebuah unit, sesuaikan jalur untuk bergerak di sekitar itu.
sumber
Ada beberapa referensi untuk perilaku mengemudi dan berkelompok di situs web Craig Reynold . Mereka relatif sederhana untuk diterapkan tetapi dapat menghasilkan beberapa perilaku muncul yang indah.
sumber
Semua jawaban lain menghasilkan hasil yang lebih baik, tetapi cara termurah (?) Untuk menghindari pengelompokan lengkap adalah dengan hanya menambahkan vektor acak yang mungkin 25% dari vektor gerakan terhitung asli sehingga benda memantul sedikit di dalam kelompok gumpalan umum . Ini tidak akan membuat semuanya benar-benar saling menjauh, tetapi tergantung pada apa yang Anda coba capai, saya telah menemukan ini cukup. Objek masih dapat dikelompokkan dengan metode ini jika Anda menjalankan lingkaran di sekitar mereka, tetapi seiring waktu mereka cenderung menyebar.
Berikut ini adalah gim kecil-biar saya buat beberapa tahun lalu yang menunjukkan metode ini: http://deleter.phatcode.net/index.php?page=projects&p=4
sumber
Orang-orang selalu memunculkan boids karena itu memberikan hasil yang sangat baik, tetapi menerapkan boids mungkin berlebihan untuk tujuan spesifik Anda. Di masa lalu saya mendapatkan hasil yang sangat baik dengan hanya mengacak posisi target dalam lingkaran kecil.
Misalnya, untuk demo yang saya buat di Unity saya menggunakan perintahnya Random.insideUnitSphere untuk melakukan puffballs berkelompok
sumber
Saya menghadapi masalah yang sama ketika saya menggunakan NevMeshAgent sebagai musuh, enemeis saling menembus sehingga saya meningkatkan
Jari-jari NavMeshAgent
Berkat gameDevAnswer
sumber