การหาเส้นทางในเกม RTS ทำงานอย่างไร


42

[crossposted จาก stackoverflow]

ในเกมเช่น Warcraft 3 หรือ Age of Empires วิธีที่ฝ่ายตรงข้าม AI สามารถเคลื่อนไหวเกี่ยวกับแผนที่ดูเหมือนจะไร้ขีด จำกัด แผนที่มีขนาดใหญ่มากและตำแหน่งของผู้เล่นอื่นก็เปลี่ยนแปลงอยู่ตลอดเวลา

การค้นหาเส้นทาง AI ในเกมเช่นนี้เป็นอย่างไร วิธีการค้นหากราฟแบบมาตรฐาน (เช่น DFS, BFS หรือ A *) ดูเหมือนเป็นไปไม่ได้ในการตั้งค่า


2
ทำไม A * ไม่ทำงานในกราฟนี้
user712092

บล็อกที่เกี่ยวข้อง: ai-blog.net/archives/000152.html
tenfour

1
@ อีกสี่ลิงก์เสียแล้ว
มอนทรีออล

คำตอบ:


29

ในกรณีส่วนใหญ่การใช้A *บนตาข่ายนำทาง (โดยทั่วไปเรียกว่า "navmesh") เป็นวิธีแก้ปัญหาการหาเส้นทางเชิงพาณิชย์ RTS ใช้ มีคำอธิบายรายละเอียดของวิธีการ navmeshes ทำงานทำไมพวกเขาจะเป็นทางออกที่ดีกว่าระบบ waypoint และการเชื่อมโยงไปยังแหล่งข้อมูลการดำเนินงานเป็นที่นี่

หากคุณวางแผนที่จะพัฒนาโหมดเกมพิเศษ (การจับจุด / โหนด) หรือหน่วยที่ลาดตระเวนครอบคลุม ฯลฯ คุณอาจต้องการใช้ waypoint layer บน navmesh ของคุณเพื่อควบคุมพฤติกรรม AI ( ไม่ใช่การหาเส้นทาง )


17

ตรวจสอบอัลกอริทึมของFlowfield ที่ใช้ใน Supreme Commander 2 มันทำงานได้ดีกว่าระบบ RF pathfinding ส่วนใหญ่ (ข้ามไปที่ 0:50 เพื่อดูตัวอย่าง)


4
นั่นเป็นตัวอย่างที่เจ๋งมาก แต่ไม่ได้บอกฉันเกี่ยวกับการติดตั้งตัวเอง
MetaGuru

4
พวกเขากล่าวถึงในประโยคเดียว - มันอยู่บนพื้นฐานของการวิจัยการไหลของฝูงชนขอบคุณซึ่งคุณสามารถหาที่grail.cs.washington.edu/projects/crowd-flows

อัลกอริทึมของ flowfield นั้นค่อนข้างน่าสนใจและดูเหมือนว่าจะทำงานได้ดีกว่าการอัลกอริธึม แต่ฉันหวังว่าจะมีเอกสารสาธารณะเกี่ยวกับการทำงานของระบบไม่ใช่แค่การทำงานของระบบ โดยธรรมชาติมีคำถามมากมายที่นักพัฒนาควรถามก่อนนำระบบหลักมาใช้เช่นนี้ แต่ในกรณีนี้ดูเหมือนว่าวิธีเดียวที่จะตอบคำถามเหล่านี้คือการใช้ระบบก่อน :(
Ari Patrick

2
@Kragen: คุณเพียงแค่ต้องมีสองหน่วยก่อนที่จะมี A * (โดยเฉพาะจุดเล็ง) ทำให้พวกมันชนกันซ้ำแล้วซ้ำอีกและคุณต้องการระบบที่จะทำงานรอบ ๆ

5
จากการดูวิดีโอเส้นทางของ Starcraft 2 มีลักษณะเช่นนี้ SC2 ใช้ flowfield หรือไม่
Chris Bui

7

เกมที่เก่ากว่าหลายเกมใช้ A * สตาร์คราฟต์ดั้งเดิมใช้ A *; ซึ่งนำไปสู่ปัญหาบางอย่างในการจัดการกับการปะทะกัน ตาร์คราฟต์ 2 จัดการการปะทะกันได้เป็นอย่างดีโดยใช้พฤติกรรมการ swaming / flocking เพื่อรักษาการควบคุมของเหลวของกลุ่มขนาดใหญ่ นี้บทความ gamedev กล่าวถึงวิธีการนี้อาจจะถูกบรรลุ


2

ฉันเห็นด้วยกับคำตอบอื่น ๆ ของเธอแล้ว แต่ลองคิดว่า WoW / Warcraft3 เป็นโลก 2D จริง ๆ พวกเขาไม่เห็นด้วยที่แตกต่างจากกระเบื้องที่ใช้เป็นเพียงแค่กระเบื้อง

คุณอาจคิดว่า GPS หาเส้นทางที่ดีที่สุดได้อย่างไร? มี algortimns จำนวนมากสำหรับการค้นหาเส้นทางผ่านแผนที่ที่เชื่อมโยง

ฉันคิดว่าสคริปต์ "Quake bots" ตัวแรกอาจช่วยคุณได้เช่นกันเนื่องจากพวกมันถูกพัฒนาขึ้นเพื่อทำงานใน "พื้นที่ที่ไม่รู้จัก" เพราะเราสามารถออกแบบระดับของเราเองตั้งแต่เริ่มต้น

โดยรวมแล้ววิธีส่วนตัวของฉันในการจัดการกับแผนที่เช่นนั้นก็คือคิดว่ามันเป็น A * pathfinder แต่ก่อนอื่นฉันจะคำนวณทุกอย่างก่อน "จุดกระเบื้อง" และทำดัชนีสิ่งเหล่านี้ด้วย "เพื่อนบ้านที่ใกล้ที่สุด" เป็นต้นจากนั้นเมื่อวัตถุที่จำเป็นต้องไปจาก A ถึง B จากนั้นเพียงค้นหาใน B ดูสิ่งที่เชื่อมต่อและทำซ้ำจนกว่าคุณจะ ไปถึงเป้าหมาย

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

หวังว่านี่จะเป็นความรู้สึกเล็กน้อยและอาจทำให้คุณมีความคิดที่จะทำงานด้วย


1

เกมส่วนใหญ่ใช้ Search Algorithm หรือ A * เพื่อค้นหาเส้นทางบนแผนที่ AI ถูกปรับแต่งในบางด้านอย่างชัดเจนด้วยเหตุผลด้านประสิทธิภาพ

คุณจะสังเกตเห็นสิ่งนี้ใน Starcraft 2 ที่ Zerglings เห็นได้ชัดว่าเส้นทางไม่ดีเลยมันเป็นฝันร้ายของซีพียูสำหรับ Zerglings พวกเขาทำได้ดีที่สุดที่จะได้รับจาก A ถึง B และอย่าพยายามหาเส้นทางที่ดีที่สุด พวกเขาจะเข้าใกล้ที่สุดเท่าที่จะเป็นไปได้แล้วคอขวดที่ฉายาหรือทางลาด


1

แผนที่เป็นกริด กริดเป็นกราฟ A * ทำงานบนกราฟมันเป็นกราฟขั้นตอนวิธีการค้นหา A * ควรค้นหากราฟสองสามโหนด

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

ไม่แน่ใจเกี่ยวกับ Warcraft หรือเกมเชิงพาณิชย์ แต่ยังมีเทคนิคที่เรียกว่าCollaborative Diffusionและมันง่ายมาก มันมักจะทำในตาราง นอกจากนี้ยังมีเทคนิคที่เรียกว่าPotential Fieldsซึ่งคล้ายกับก่อนหน้านี้หากไม่เหมือนกัน

คุณอาจลอง:

  • เกมเหล่านี้บางเกมมีซอร์สโค้ดหรือไม่
  • ไม่ว่าจะเป็นโคลนบางส่วนของเกมเหล่านี้มีแหล่งที่มาใช้ได้
  • SDK หรือบรรณาธิการไม่ได้บอกใบ้อะไร
  • ถามนายจ้างของ บริษัท ที่ทำเกมเหล่านี้บางคนอาจเต็มใจที่จะแบ่งปัน

0

ฉันไม่ได้มีประสบการณ์โดยสิ้นเชิง แต่ฉันคิดว่าทางออกที่ดีขึ้นอยู่กับการวิเคราะห์พฤติกรรมไม่ใช่การตรวจสอบแผนที่ที่รู้จักอย่างสมบูรณ์ การวิเคราะห์ความรู้ที่ฉันสามารถนึกถึงได้มีพื้นฐานมาจากในพื้นที่และจากประสบการณ์ การควบคุมในท้องถิ่นอาจขึ้นอยู่กับการตรวจสอบภูมิประเทศและสิ่งกีดขวางทำให้เคลื่อนที่ไปในทิศทางที่ต้องการ ฉันคิดว่าแผนที่ส่วนใหญ่ไม่ต้องการการเคลื่อนไหวที่ซับซ้อนเหมือนเขาวงกต แต่เชื่อมต่อกันค่อนข้างสวย ฮิวริสติกอื่นคือการใช้เส้นทางที่รู้จักก่อนหน้านี้ (สำรวจโดยหน่วยอื่นหรือผู้ใช้อย่างชัดเจน) เพื่อย้ายหน่วยไปยังตำแหน่งที่รู้จักหรือใกล้เคียง แต่ฉันกำลังพูดถึงการเคลื่อนย้ายบนแผนที่ขนาดใหญ่ไม่ใช่ในพื้นที่ปิดอย่าง ZorbaTHut กล่าว ในกรณีที่แออัดอัลกอริทึมอาจมีความซับซ้อนมากขึ้นซึ่งต้องมี "การทำนาย" การประสานงานระหว่างหน่วยของทีมเดียวกันหรือเพียงแค่รอสัญญาณเซมาฟอร์ นอกจากนี้

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

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


อืมมมฉันสงสัยว่ามีอะไรผิดปกติในสิ่งที่ฉันพูด ... มันยากเกินไปที่จะแสดงความคิดเห็น?
AkiRoss

BTW ฉันต้องการเน้นว่า A * ใช้วิธีแก้ปัญหาแบบฮิวริสติก ขอบคุณสำหรับ -2
AkiRoss

จำนวนคำตอบของคุณคือ "Ditch A * และ ilk และม้วนของคุณเอง" นั่นอาจเป็นจุดเริ่มต้นของคำตอบที่สมเหตุสมผล แต่คุณให้ข้อมูลน้อยมากนอกเหนือจากข้อเสนอแนะ มันคิดว่าเหตุผลของการลงคะแนนเสียงคือคุณไม่ได้บอกชัดเจนว่าโซลูชันของคุณจะใช้งานได้อย่างไร ฉันไม่สงสัยเลยว่าอัจฉริยะที่มีเวลาไม่ จำกัด สามารถส่งรหัส / ปรับอัลกอริทึมการทำเส้นทางสำหรับ RTS ที่กำหนดซึ่งจะดีกว่า A * บน navmesh แต่ "อัจฉริยะ" และ "ไม่ จำกัด " นั้นหายากมาก
deft_code

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