คำถามติดแท็ก navmesh

2
ฉันจะสร้างตาข่ายนำทางสำหรับตารางย่อยได้อย่างไร
ฉันยังไม่ได้เริ่มเขียนโปรแกรมสำหรับอันนี้ แต่ฉันต้องการที่จะดูว่าฉันจะทำอย่างไรต่อไป สมมติว่าฉันมีตารางของกระเบื้องขนาดเท่ากันทั้งหมดที่ผ่านได้และบางอันไม่มี ฉันจะสร้างโครงข่ายการนำทางของรูปหลายเหลี่ยมจากกริดนี้ได้อย่างไร ความคิดของฉันคือการนำกระเบื้องที่ไม่สามารถผ่านได้และขยายเส้นจากขอบเพื่อสร้างรูปหลายเหลี่ยม ... นั่นคือทั้งหมดที่ฉันได้รับ คำแนะนำใด ๆ?

6
ทำให้ AI ใช้เส้นทางที่แตกต่างกัน
ฉันมีเกม 2d จากบนลงล่างที่ AI วางไข่ที่ขอบแผนที่และวิ่งไปที่กึ่งกลาง ฉันใช้ A * และ node mesh เพื่อทำ pathfinding ตอนนี้ AI จะวางไข่ที่จุดหนึ่งบนขอบของแผนที่และใช้เส้นทางเดียวกันซึ่งเป็นเส้นทางที่สั้นที่สุดไปยังศูนย์กลาง ตอนนี้ฉันต้องการให้พวกเขาประหลาดใจและน่าสนใจยิ่งขึ้นและใช้เส้นทางที่แตกต่างกัน ฉันสามารถคิดได้ทันทีถึงสองแนวคิดในการทำสิ่งนี้ แต่อยากรู้ว่ามีวิธีอื่นหรือวิธีที่ดีกว่าที่ผู้คนมักจะใช้หรือไม่? เมื่อศัตรูคนหนึ่งวางไข่และสร้างเส้นทางไปยังศูนย์กลางให้เพิ่มค่าใช้จ่ายของโหนดทั้งหมดบนเส้นทางนั้นชั่วคราวจากนั้นค่อยๆลดพวกมันกลับลงเมื่อเวลาผ่านไป จากนั้น AI ของศัตรูที่วางไข่ในภายหลังจะถูกบังคับให้ใช้เส้นทางที่กว้างขึ้น วิธีการข้างต้นจะนำไปสู่ ​​AI เพียงแค่ใช้เส้นทางที่กว้างขึ้นและกว้างขึ้นและยังสามารถคาดเดาได้มาก ดังนั้นฉันคิดว่าฉันจะแนะนำโหนดเป้าหมายระดับกลางจำนวนหนึ่งรอบแผนที่ เมื่อ AI วางไข่พวกเขาสุ่มเลือกหนึ่งในเป้าหมายระดับกลางและมุ่งหน้าไปที่นั่นก่อนที่จะมุ่งหน้าไปที่กึ่งกลางของแผนที่ การรวมสิ่งนี้เข้ากับวิธีการข้างต้นในการเพิ่มต้นทุนอาจจะดูค่อนข้างดี? วิธีใดที่ผู้คนพบว่าทำงานได้ดีที่สุดในการทำให้ AI เปลี่ยนเส้นทางที่พวกเขาใช้ดูน่าเชื่อถือและน่าประหลาดใจ

1
A * การค้นหาพา ธ ตาข่าย
ดังนั้นฉันจึงได้สร้างเกมจาวา 2D ขึ้นมาในกรอบนี้เรียกว่าGreenfootและฉันได้ทำงานกับ AI สำหรับผู้ชายที่คุณจะต่อสู้ ฉันต้องการให้พวกเขาสามารถย้ายไปทั่วโลกได้อย่างสมจริงดังนั้นฉันจึงรู้ทันทีว่าในอีกสองสามอย่างฉันจะต้องมีการค้นพบบางอย่าง ฉันสร้างต้นแบบ A * สองชุด อันแรกเป็นแบบกริดและจากนั้นฉันก็สร้างมันขึ้นมาที่ทำงานร่วมกับจุดอ้างอิงดังนั้นตอนนี้ฉันต้องหาวิธีที่จะได้รับจาก "แผนที่" 2d ของอุปสรรค / สิ่งปลูกสร้างไปยังกราฟของโหนดที่ฉันสามารถสร้างเส้นทางได้ การค้นหาเส้นทางที่แท้จริงดูเหมือนจะดีเพียงแค่รายการเปิดและปิดของฉันเท่านั้นที่สามารถใช้โครงสร้างข้อมูลที่มีประสิทธิภาพมากขึ้น แต่ฉันจะไปที่นั้นถ้าต้องการ ผมตั้งใจที่จะใช้ตาข่ายเดินเรือด้วยเหตุผลทั้งหมดออกเรียงรายอยู่ในนี้โพสต์บน ai-blog.net อย่างไรก็ตามปัญหาที่ฉันเผชิญคือสิ่งที่ A * คิดว่าเป็นเส้นทางที่สั้นที่สุดจากจุดกึ่งกลาง / ขอบของรูปหลายเหลี่ยมไม่จำเป็นต้องเป็นเส้นทางที่สั้นที่สุดหากคุณเดินทางผ่านส่วนใดส่วนหนึ่งของโหนด เพื่อให้ได้ความคิดที่ดีที่คุณสามารถดูคำถามที่ผมถามใน StackOverflow ฉันได้รับคำตอบที่ดีเกี่ยวกับกราฟการมองเห็น ฉันได้ซื้อหนังสือเล่มนี้มาแล้ว ( Computational Geometry: Algorithms และ Applications ) และอ่านเพิ่มเติมในหัวข้ออย่างไรก็ตามฉันยังคงชอบการนำทางแบบเครือข่าย (ดู "การจัดการความซับซ้อน " จากหมายเหตุของ Amit เกี่ยวกับการหาเส้นทาง ) (ตามบันทึกด้านข้างบางทีฉันอาจใช้ Theta * เพื่อแปลง waypoints …

2
การเคลื่อนไหวนั้นขึ้นอยู่กับอัตราเฟรมแม้จะใช้ Time.deltaTime
ฉันมีรหัสต่อไปนี้เพื่อคำนวณการแปลที่จำเป็นในการย้ายวัตถุเกมใน Unity ซึ่งเรียกว่าLateUpdateมา จากสิ่งที่ฉันเข้าใจการใช้งานของฉันTime.deltaTimeควรจะทำให้เป็นอิสระแปลสุดท้ายอัตราเฟรม (โปรดทราบCollisionDetection.Move()เป็นเพียงการแสดง raycasts) public IMovementModel Move(IMovementModel model) { this.model = model; targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed; model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed, model.Accel); if (model.IsJumping) { model.AmountToMove = new Vector3(model.AmountToMove.x, model.AmountToMove.y); } else if (CollisionDetection.OnGround) { model.AmountToMove = new Vector3(model.AmountToMove.x, 0); } model.FlipAnim = flipAnimation(targetSpeed); // If …

4
เราจะสร้าง Navigation Grid สำหรับโลก 3 มิติได้อย่างไร
ฉันพยายามค้นหาวิธีแก้ไขปัญหานี้ ฉันกำลังพยายามสร้างตาข่ายนำทางในรูปแบบของตารางของจุดยอดที่ล็อค x, y พิกัดพื้นในรูปสี่เหลี่ยมสำหรับพื้นที่ 3D แต่ฉันมีปัญหาในการพยายามหาวิธีที่จะไปเกี่ยวกับเรื่องนี้ ฉันลองดูที่ห้องสมุด Recast มันเป็นวิธีที่ค่อนข้างแข็งแกร่ง แต่เห็นได้ชัดว่าช้าลงด้วยแผนที่ขนาดใหญ่และพื้นที่เปิดโล่ง ฉันยังไม่รู้ว่าพวกมันสร้างจุดยอดและขอบสำหรับพื้นที่โลกด้วยแผนที่ความสูงได้อย่างไร ความคิดต่อไปของฉันคือการทำสิ่งที่ Unreal Engine 3 เคยทำ https://udn.epicgames.com/Three/NavigationMeshReference.html ซึ่งก็คือการใช้ raycasts เพื่อสร้างตาข่าย ฉันไม่สามารถหาวิธีที่จะให้ raycasts หยุด ดังนั้น ... ตัวเลือกถัดไปของฉันคือกล่อง สร้างปริมาตรย่อยที่มีขนาดเท่ากับกำลังของ 2 จัดแนวกล่องให้เข้ากับกริดและยิงปริซึมสี่เหลี่ยมลงด้านล่างเป็นรังสี ถ้ามันตกลงบนชิ้นส่วนของรูปทรงเรขาคณิตซึ่งเป็นส่วนหนึ่งของพื้นดินและสี่เหลี่ยมผืนผ้าไม่ได้ถูกตัดกันให้ปล่อยให้เป็นรูปสี่เหลี่ยมจัตุรัส และดำเนินการต่อไปจนกระทั่งถึงระดับเสียง ในการตรวจสอบว่าจำเป็นต้องทำการเชื่อมโยงขอบหรือไม่ฉันคิดว่าฉันสามารถตรวจสอบเพื่อดูว่าความชันระหว่างจุดยอดสองคู่อยู่ในความลาดชันที่เดินได้หรือไม่หากรวมให้เป็นจริง ปัญหาหลักของฉันคือ ... นี่ดูเหมือนจะไม่เหมาะสมที่สุด โดยไม่ต้องคิดเลยเมื่อกระบวนการประมาณ O (N ^ 3) สำหรับระดับหลายชั้น ซึ่งจะได้รับที่น่ารังเกียจสวย และบิตสุดท้ายสำหรับสร้างกลุ่มสี่เหลี่ยมของสี่เหลี่ยมเหล่านี้โดยอัตโนมัติ ฉันไม่แน่ใจทั้งหมดว่าจะทำอย่างไร การใช้งานที่ไม่จริงแยกพวกเขาด้วยความลาดชัน อย่างไรก็ตามฉันพยายามที่จะรักษารูปแบบกริด นั่นไม่จำเป็นเลย ปัญหายังคงอยู่ในการสร้างแผ่นสี่เหลี่ยมขนาดใหญ่เพื่อแบ่งเส้นทางการค้นหาเป็นแบบเรียงต่อแผ่น กระเบื้องต้องไม่ใหญ่เกินไปหรือเล็กเกินไป …
11 c++  tiles  navmesh 

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

3
ฉันจะสร้างตาข่ายนำทางแบบ 2d ในสภาพแวดล้อมแบบไดนามิกที่รันไทม์ได้อย่างไร
ดังนั้นฉันจึงเข้าใจวิธีใช้ A * สำหรับการค้นหาเส้นทางและฉันสามารถใช้ในตารางได้ อย่างไรก็ตามโลกของเกมของฉันมีขนาดใหญ่มากและฉันมีศัตรูมากมายที่เคลื่อนเข้าหาผู้เล่นซึ่งเป็นเป้าหมายที่เคลื่อนที่ดังนั้นระบบกริดจึงช้าเกินไปสำหรับการค้นหาเส้นทาง ฉันต้องการทำให้กราฟโหนดของฉันง่ายขึ้นโดยใช้ mesh navigational ฉันเข้าใจแนวคิดของ "วิธี" ตาข่ายทำงาน (ค้นหาเส้นทางผ่านโหนดบนจุดยอดและ / หรือศูนย์กลางของขอบของรูปหลายเหลี่ยม) เกมของฉันใช้สิ่งกีดขวางแบบไดนามิกที่สร้างขึ้นตอนรันไทม์ ฉันไม่สามารถคาดศีรษะได้ว่าจะต้องใช้เครื่องบินที่มีสิ่งกีดขวางมากมายและแบ่งพื้นที่ที่สามารถเดินได้ให้เป็นรูปหลายเหลี่ยมสำหรับตาข่ายนำทางเช่นเดียวกับภาพต่อไปนี้ ฉันจะเริ่มที่ไหน ฉันจะรู้ได้อย่างไรว่าเมื่อเซ็กเมนต์ของพื้นที่ที่สามารถเดินได้หรือที่แย่กว่านั้นเมื่อฉันรู้ว่าฉันต้องแบ่งพื้นที่ที่สามารถเดินได้ที่กำหนดไว้ก่อนหน้านี้เป็นอัลกอริทึม "เดิน" ผ่านแผนที่ ฉันใช้จาวาสคริปต์ใน nodejs ถ้ามันสำคัญ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.