ขณะนี้ฉันกำลังจำลองแรงกระแทกทางฟิสิกส์เพื่อหลีกเลี่ยงหน่วยในท้องที่ แต่บางครั้งวิธีนี้ผลักหน่วยออกจากการก่อตัวและมีผลกระทบที่ไม่พึงประสงค์มากเมื่อหน่วยกอเป็นก้อน
สำหรับเกม RTS เช่น Starcraft 2 การหลีกเลี่ยงในพื้นที่ทำได้อย่างไร? ฟิสิกส์จำลองหรือตัวควบคุมรอบรู้ตัดสินใจในสิ่งที่ควรเป็นหรือไม่? ฉันรู้ว่าคำถามนี้อาจจะค่อนข้างกว้างดังนั้นฉันจึงถามว่าจะทำอย่างไรเพื่อให้บรรลุถึงพฤติกรรมการหลีกเลี่ยงในท้องถิ่นของ Starcraft 2; แม้ว่าสิ่งใดก็ตามที่ได้ผลจะได้รับการชื่นชมอย่างมาก
ฉันไม่ได้มองหารหัสใด ๆ - แค่แหล่งข้อมูลที่มีประโยชน์หรือคำอธิบายว่า Starcraft 2 (หรือเกมที่คล้ายคลึงกัน) จัดการกับการหลีกเลี่ยงในท้องถิ่นได้อย่างไร
ขณะนี้ฉันมีการตรวจจับการชน (พร้อมการสอดใส่เวกเตอร์), แรงการชนและการเคลื่อนที่โดยใช้ความเร็ว ทุกหน่วยจะถูกตรวจสอบเพื่อชนกัน - ถ้าพวกมันชนกันวัตถุจะถูกชดเชยโดยเวกเตอร์การเจาะในทันทีจากนั้นแรงปะทะจะถูกนำมาใช้ จากนั้นวงอื่นก็จะย้ายวัตถุตามความเร็วของพวกมันและใช้การลากไปที่ความเร็ว ออฟเซ็ตจะช่วยลดปัญหาการชนกันของแรงกระแทกที่มากเกินไปที่นำไปใช้กับยูนิตแบบกลุ่ม แต่บางครั้งหน่วยก็ยังยิงออกมา
โซลูชันที่ฉันกำลังมองหาต้องการตอบสนองความต้องการดังต่อไปนี้ (เช่นเดียวกับ Starcraft 2):
- วัตถุจะไม่ทับซ้อนกัน หรืออย่างน้อยที่สุดต้องมีการทับซ้อนกันในที่สุด
- วัตถุไม่ได้ผลักกันมากเกินความจำเป็นเพื่อให้ 2 หน่วยสามารถยืนและเคลื่อนที่ไปข้าง ๆ กันในรูปแบบ
- ไม่ควรมีพฤติกรรมแปลก ๆ เมื่อวัตถุจับกลุ่มไปยังปลายทางเดียวกัน
- สามารถรองรับหน่วยที่มีขนาดแตกต่างกันและแม้แต่รูปร่างนูนที่แตกต่างกัน
สิ่งที่ฉันคิดอยู่ตอนนี้คือแทนที่จะตรวจจับการชนตรวจหาการชนในอนาคตเพื่อให้การทับซ้อนไม่เคยเกิดขึ้น จากนั้นใช้ข้อ จำกัด ตรวจสอบให้แน่ใจว่าความเร็วของทั้งสองหน่วยไม่ทำให้พวกเขาเหลื่อมกัน ฉันยังคงแก้ไขด้วยอัลกอริทึมสำหรับ จำกัด การเคลื่อนไหวที่ทับซ้อนกัน