Şu anda, birimlerin yerel olarak önlenmesi için fizik etki kuvvetlerini simüle ediyorum, ancak bu yöntem bazen birimleri oluşumdan çıkarıyor ve birimler toplandığında çok istenmeyen etkilere sahip.
Starcraft 2 gibi RTS oyunları için yerel kaçınma nasıl yapılır? Fizik simüle ediliyor mu yoksa yetersiz bir denetleyici her şeyin nerede olması gerektiğine karar veriyor mu? Bu sorunun biraz geniş olabileceğini biliyorum, bu yüzden özellikle Starcraft 2'nin yerel kaçınma davranışlarına nasıl ulaşılacağını soruyorum; ama işe yarayan her şey çok takdir edilecektir.
Herhangi bir kod aramıyorum - sadece yararlı kaynaklar veya Starcraft 2'nin (veya benzer oyunların) yerel kaçınmayı nasıl işlediğine dair açıklamalar.
Şu anda çarpışma tespiti (penetrasyon vektörü ile), çarpışma kuvvetleri ve uygulanan hıza göre hareket var. Her ünite bir çarpışma için diğerine karşı kontrol edilir - çarpışırlarsa, nesneler derhal penetrasyon vektörü ile dengelenir, sonra çarpışma kuvveti uygulanır. Daha sonra başka bir döngü, nesneleri hızlarına göre hareket ettirir ve hızlara sürükleme uygular. Ofset, kümelenmiş birimlere uygulanan aşırı çarpışma kuvvetleri sorununu azaltır, ancak birimler hala bazen dışarı atılır.
Aradığım çözümün (Starcraft 2'de olduğu gibi) aşağıdaki gereksinimleri karşılaması gerekiyor:
- Nesneler örtüşmez; veya en azından çakışmaların eninde sonunda çözülmesi gerekir.
- Nesneler birbirlerini gereğinden fazla uzağa itmezler, bu nedenle 2 ünite bir oluşumda yan yana durabilir ve hareket edebilir.
- Nesneler aynı hedefe doğru toplandığında tuhaf davranışlar olmamalıdır.
- Farklı boyutlardaki birimleri ve hatta farklı dışbükey şekilleri destekleyebilir.
Şimdiye kadar düşündüğüm, çarpışmaları tespit etmek, gelecekteki çarpışmaları tespit etmek yerine çakışma asla gerçekleşmiyor. Ardından, 2 birimin hızlarının çakışmasına neden olmadığından emin olarak kısıtlamayı uygulayın. Hala örtüşme ötesinde hareketi kısıtlamak için algoritma ile uğraşıyorum.