มีวิธีง่ายๆในการหยุดศัตรูที่ยืนอยู่ในจุดเดียวกันหรือไม่?


24

ดังนั้นเกมบนลงล่างศัตรูของฉันไล่ล่าผู้เล่นเมื่อพวกเขาอยู่ในระยะที่กำหนดพวกเขาจะหยุดนิ่งและยิง หากพวกเขามาจากทิศทางเดียวกันพวกเขาทั้งหมดจะยืนอยู่ในจุดเดียวกัน (เช่นยืน "ภายใน" กันและกัน) เนื่องจากฉันไม่ได้ทำการตรวจจับการชนกันระหว่างศัตรู - พวกเขามีอิสระที่จะผ่านกันและกัน

วิธีง่ายๆในการนี้คืออะไร? อาจเป็นรูปแบบหนึ่งของการตรวจจับการชนกันหรือ ai บ้าง


1
จำกัด ตัวเองให้เป็นหนึ่งศัตรู : P
Kylotan

คำตอบ:


18

คุณไม่จำเป็นต้องมีการตรวจจับการชน แต่คุณจะต้องให้สติปัญญาแก่ศัตรูของคุณและให้พวกเขาหลีกเลี่ยงการวิ่งเข้าหากัน การตรวจจับการชนโดยที่ไม่เพียง แต่จะทำให้ศัตรูของคุณดูงี่เง่าอยู่แล้ว - ผู้คนหลีกเลี่ยงซึ่งกันและกันโดยทั่วไปพวกเขาไม่ได้ชนกัน

ค้นหา "flocking" เพื่อดูพฤติกรรมที่เรียบง่าย

แนวคิดพื้นฐานคือสิ่งที่ควรมุ่งหน้าไปยังผู้เล่น แต่อยู่ห่างจากสิ่งกีดขวางที่ใกล้ชิด (ซึ่งกันและกันผนังกำแพงสิ่งนั้น)


6
มันเรียกว่า boids อ่านข้อมูลเกี่ยวกับกฎง่ายๆรอบ boids ที่นี่: en.wikipedia.org/wiki/Boids ควรจะเป็นที่น่ารำคาญที่จะใช้ข้อ จำกัด เหล่านี้
Nailer

12

คุณสามารถสร้างแรงบันดาลใจตัวเองในพฤติกรรม flockingเช่นboids

สิ่งเหล่านี้มีแนวโน้มที่จะประกอบด้วยกฎง่าย ๆ 3-4 ข้อที่ใช้อย่างถูกต้องส่งผลให้เกิดพฤติกรรมที่น่าพึงพอใจและ "ดูซับซ้อน"

ในกรณีของคุณคุณสามารถลองสิ่งนี้:

  • การแยก (รัศมีขั้นต่ำระหว่างศัตรู)
  • การติดต่อกัน (เพื่อให้พวกเขาเดินทางเป็นกลุ่ม)
  • การจัดตำแหน่ง (ดังนั้นพวกเขาจึงมีแนวโน้มที่จะย้ายไปในทิศทางเดียวกัน)
  • เป้าหมาย (พวกเขาควรจะย้ายไปหาผู้เล่น)

นี่เป็นสำเนาของคำตอบของ JasonD ฉันสาบานว่าฉันไม่ได้ดูมันก่อนโพสต์
egarcia


3

คุณอาจต้องการดูการกระจายการทำงานร่วมกัน (ภาพเคลื่อนไหวที่ยอดเยี่ยมที่นี่) หรือรูปแบบการต่อต้านแบบอื่นสำหรับการเคลื่อนไหว ในขณะที่อัลกอริธึมการแพร่กระจายในและของตัวเองอาจไม่หยุดศัตรูจากการข้ามผ่านคุณสามารถเพิ่มข้อ จำกัด เพิ่มเติมเพื่อทำให้มันไม่น่าเป็นไปได้หรือเป็นไปไม่ได้


การเปิดเผยอย่างสมบูรณ์: ค่อนข้างแน่ใจว่าฉันพบลิงก์การทำงานร่วมกันที่นี่ที่ใดที่หนึ่งใน GD แต่ฉันไม่สามารถหาโพสต์ที่อ้างถึงได้ในชีวิตของฉันในตอนนี้ มันค่อนข้างหา =)
อ่าน

นี่ยอดเยี่ยมมาก แต่ฉันก็ซับซ้อนเกินกว่าที่ฉันต้องการ จะอ่านสมุดปกขาวอยู่แล้ว แต่สามารถจัดการให้ใช้โซลูชันที่ง่ายขึ้นได้
Iain

2

เกิดอะไรขึ้นถ้าคุณไม่อนุญาตให้ย้ายผ่านหน่วยอื่น ๆ ดูเหมือนว่าคุณจะต้องใช้ไม่ช้าก็เร็ว เมื่อใดก็ตามที่หน่วยเส้นทางปัจจุบันถูกบล็อกโดยหน่วยปรับเส้นทางเพื่อย้ายไปรอบ ๆ


2

มีการอ้างอิงบางอย่างสำหรับพวงมาลัยและพฤติกรรม flocking ที่เป็นเว็บไซต์เครก Reynold ของ มันค่อนข้างง่ายที่จะติดตั้ง แต่สามารถสร้างพฤติกรรมฉุกเฉินที่น่ารักได้


นี่เป็นคำตอบเดียวกับ 2 อื่น ๆ แต่ +1 สำหรับลิงก์ - เว็บไซต์นั้นเป็นข้อมูลอ้างอิงที่ดีจริงๆ
AShelly

1

คำตอบอื่น ๆ ทั้งหมดให้ผลลัพธ์ที่ดีกว่า แต่วิธีที่ถูกที่สุด (?) เพื่อหลีกเลี่ยงการจัดกลุ่มที่สมบูรณ์คือเพียงเพิ่มเวกเตอร์แบบสุ่มที่อาจจะเป็น 25% ของเวกเตอร์การเคลื่อนไหวที่คำนวณดั้งเดิมเพื่อให้วัตถุเด้งไปรอบ ๆ . มันจะไม่แยกสิ่งต่าง ๆ ออกจากกัน แต่ขึ้นอยู่กับสิ่งที่คุณพยายามจะทำให้สำเร็จฉันพบว่ามันเพียงพอแล้ว วัตถุยังคงสามารถจัดกลุ่มด้วยวิธีนี้ถ้าคุณเรียกใช้วงกลมรอบพวกเขา แต่เมื่อเวลาผ่านไปพวกเขามักจะกระจาย

นี่เป็นเกมเล็ก ๆ ที่ฉันทำเมื่อหลายปีก่อนซึ่งแสดงวิธีการนี้: http://deleter.phatcode.net/index.php?page=projects&p=4


1

ผู้คนมักจะนำ boids ขึ้นมาเพราะมันให้ผลลัพธ์ที่ดีมาก แต่การใช้ boids อาจเกินความต้องการของคุณ ในอดีตฉันได้ผลลัพธ์ที่ดีมากโดยเพียงแค่สุ่มตำแหน่งเป้าหมายภายในวงกลมเล็ก ๆ

ตัวอย่างเช่นสำหรับการสาธิตฉันสร้างขึ้นใน Unity ฉันใช้คำสั่งRandom.insideUnitSphereเพื่อflocking puffballs


+1 ฉันเห็นด้วยอีกตัวอย่างหนึ่งของกลยุทธ์นี้ (อาจจะมีการรับประกันที่ดีกว่าเล็กน้อยไม่ทับซ้อนกัน) สามารถพบได้ที่นี่: "Unclutter" หน่วยในเกม RTS
MichaelHouse

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.