ติดตามเส้นทางในแบบเรียบ


9

ขณะนี้ฉันกำลังสร้างเกมป้องกันหอคอย 2d ที่มีช่องทางเคลื่อนที่ที่กำหนดไว้ล่วงหน้าซึ่งศัตรูติดตาม (เช่นหอคอยไม่สามารถบล็อกเส้นทางและการค้นหาเส้นทางไม่ใช่ปัญหาที่ฉันพยายามแก้ไข)

ฉันพยายามคิดว่าจะให้หน่วยตามช่องทางนี้อย่างราบรื่นได้อย่างไร ฉันมีแนวคิดคร่าวๆสองข้อเกี่ยวกับวิธีการทำเช่นนี้ แต่ฉันชอบที่จะป้อนข้อมูลบางอย่างซึ่งน่าจะง่ายต่อการใช้ / เทคนิคมาตรฐานมากขึ้น หรือแน่นอนถ้าฉันมีวิธีที่แตกต่างกันโดยสิ้นเชิงซึ่งฉันไม่คิดว่าฉันจะรักที่จะเรียนรู้เกี่ยวกับสิ่งนั้นเช่นกัน

จุดอ้างอิง: ความคิดแรกของฉันคือการกำหนดเส้นทางเป็นชุดของจุดอ้างอิงแบบตายตัว หน่วยจะใช้อัลกอริทึมการหมุนแบบ "ค้นหา" ขั้นพื้นฐาน (เช่นอันนี้ ) เพื่อย้ายไปยังแต่ละจุดตามเส้นทางในเส้นทางที่ต่อเนื่องกัน อย่างไรก็ตามฉันสงสัยว่ามันอาจเป็นการยากที่จะป้องกันไม่ให้หน่วยเบี่ยงเบนไปจากเลนที่ฉันต้องการให้พวกเขาติดตาม ฉันสงสัยว่าการไม่สามารถเลี้ยวอย่างรุนแรงพออาจทำให้พวกเขา "เหิน" ออกจากเลนที่ต้องการหรือไม่ ฉันคิดว่าฉันอาจสามารถป้องกันได้โดยอนุญาตให้ใช้กำลังบังคับที่ค่อนข้างแรง

Bezier Curves: วิธีที่สองที่ฉันพิจารณาคือกำหนดเส้นทางด้วยเส้นโค้ง bezier และในแต่ละขั้นตอนจะคำนวณจุดตามเส้นโค้งด้วย (dt * speed) ห่างจากตำแหน่งปัจจุบันของหน่วย ฉันสงสัยว่าเทคนิคนี้จะทำให้การกำหนดเส้นทางที่หน่วยจะปฏิบัติได้ง่ายขึ้น แต่ฉันไม่รู้ว่าจะดำเนินการอย่างไร ข้อเสนอแนะใด ๆ

นอกจากนี้ฉันไม่ต้องการเปลี่ยนคำตอบของทุกคน แต่หน่วยต่างๆจะต้องสามารถเดินทางด้วยความเร็วคงที่ตลอดเส้นทาง นอกจากนี้ฉันกำลังเขียนโปรแกรมเกมนี้ในไพ ธ อนโดยใช้ pyglet framework

หากมีคำถามเกี่ยวกับคำถามที่ไม่ชัดเจนโปรดแจ้งให้เราทราบ

แก้ไข: นอกจากนี้สำหรับสิ่งที่คุ้มค่าผมเรียงลำดับของการพยายามที่จะทำซ้ำพฤติกรรมการเคลื่อนไหวของศัตรูในราชอาณาจักร Rush


สิ่งที่เกี่ยวข้อง: gamasutra.com/view/feature/131505/..คุณใช้ความหนาแน่น / ขนาดของหน่วยเทียบกับกระเบื้องประเภทใด
ลิง

ฉันจะดูที่บทความนั้น! ฉันไม่ได้ใช้ไพ่จริง ๆ แค่ใช้พิกัดต่อเนื่องเพื่อระบุตำแหน่ง จะมีเพียงภาพพื้นหลังแบบสแตติกที่แสดงผู้เล่นที่จะย้ายยูนิต
Pwnosaurus

ฉันก็พบว่า gamedev.stackexchange.com/questions/26543/… A * ใช้ได้กับแผนที่ที่ไม่ใช่แบบกริด อาจเป็นเส้นทางโหนดในอาณาจักรที่โค้งงอในลักษณะเดียวกัน
ลิง

มีอะไรบ้างที่สามารถทำให้ศัตรูออกจากเส้นทางและต้องกลับไปหามัน? ฉันถามเพราะข้อเสนอ Bezier-curve ของคุณแนะนำว่าไม่มีในกรณีนี้ไม่มีเหตุผลที่คุณไม่สามารถคำนวณข้อมูลโดยพลการเกี่ยวกับเส้นทางทั้งหมดและไม่จำเป็นต้องใช้ตรรกะ "AI"
Kevin Reid

คำตอบ:


8

ให้ผมจะแนะนำคุณกับกระดาษที่มีชื่อเสียง Craig Reynolds' ในพฤติกรรมพวงมาลัยสำหรับตัวละครอิสระ หากคุณยังไม่ได้อ่านคุณควรก็จะช่วยให้คุณคิดว่าผ่านทุกประเภทของปัญหาเหล่านี้โดยเฉพาะอย่างยิ่งลองดูที่ส่วนบน pathfinding

ป้อนคำอธิบายรูปภาพที่นี่

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

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

ข้อดีอีกอย่างของการใช้พฤติกรรมการหมุนพวงมาลัยคือมีการใช้งานโอเพ่นซอร์สที่มีอยู่เป็นจำนวนมากในหลายภาษา (เช่นopensteer )


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


2

ทางออกในบทความ Gamasutra อาจเป็นสิ่งที่คุณกำลังมองหา แนวคิดพื้นฐานคือการส่งรังสีไปยังจุดอ้างอิงที่อยู่สองขั้นตอนก่อนหน้า waypoint ปัจจุบันของคุณ "เหยียบ" รังสีส่วนหนึ่งของความยาวของเซลล์และในแต่ละ "ก้าว" ของการตรวจสอบรังสีเพื่อดูว่าปริมาณการชนของเครื่องเล่นของคุณ ที่ตำแหน่งที่ถูกเหยียบของรังสี หากรังสีไปถึงจุดที่อยู่ข้างหน้าสองขั้นตอนคุณสามารถกำจัดจุดกลางได้ จากนั้นคุณสามารถดำเนินการกระบวนการเดียวกันนี้ไปจนถึงจุดที่ "เป้าหมาย" ... ดังนั้นหากเส้นทางของคุณสามารถทำได้โดยเส้นตรงไปยังเป้าหมายเส้นตรงสู่เป้าหมายคือเส้นทางที่ตัวละครของคุณจะทำ นี่คือบทความ: http://www.gamasutra.com/view/feature/131505/toward_more_realistic_pathfinding

นอกจากนี้ยังมีสิ่งที่ยอดเยี่ยมเกี่ยวกับรัศมีการเลี้ยวและพฤติกรรมการเลี้ยวที่เป็นธรรมชาติมากขึ้นและ ...

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