ฉันกำลังจะโพสต์ลิงค์ไปยังบล็อก Asteroid Baseบนศัตรูวอล์คเกอร์เมื่อฉันสังเกตเห็นว่าคาร์มิงตันเชื่อมโยงกับบทความ Gamasutraในความคิดเห็นแล้ว
มันอาจคุ้มค่าที่จะให้ทัศนวิสัยและคำอธิบายมากกว่านี้เป็นคำตอบในตัวของมันเอง
เคล็ดลับคือraycasts สิ่งเหล่านี้ทำให้โค้ดของคุณสแกนไปตามเส้นเพื่อชนกัน
ในการทำให้วอล์คเกอร์นั้นเรียงตัวได้ดีกับพื้นผิวพวกมันจะทำการยิงสองลำลงไปที่ภูมิประเทศหนึ่งจากทางด้านซ้ายของวอล์คเกอร์และอีกอันจากทางขวา (เส้นสีแดงและสีเหลืองด้านบน)
จากวัตถุ RaycastHit2D แต่ละตัวคุณจะได้เวกเตอร์ตั้งฉากกับพื้นผิว (เส้นสีม่วงและสีเขียว) โดยการเฉลี่ยบรรทัดฐานจากการโจมตีสองครั้งคุณจะได้รับการวางแนวที่เหมาะสมสำหรับตัวละครของคุณซึ่งสะท้อนแสงของภูมิประเทศพื้นฐาน (เส้นสีฟ้า)
คุณสามารถบังคับให้ใช้ตามแนวการวางแนวนี้เพื่อให้ตัวละครติดอยู่กับภูมิประเทศ (แม้ว่าอาจทำให้เกิดการเลื่อนบางอย่างหากแรงเสียดทานต่ำ) หรือวางตำแหน่งตัวละครด้วยตนเองที่จุดตัดกันเรย์เฉลี่ยเช่นเดียวกับวอล์คเกอร์
คุณจะต้องผสมผสานการวางแนวของตัวละครอย่างช้าๆเพื่อป้องกันไม่ให้ตัวละครของคุณสั่นสะเทือนหรือดูหุ่นยนต์ (ดูว่าการเปลี่ยนแปลงปกติอย่างรวดเร็วเมื่อวอล์คเกอร์ข้ามมุม แต่ร่างกายเคลื่อนไหวได้อย่างราบรื่น)
หากคุณมีมุมที่แหลมคมในภูมิประเทศของคุณคุณอาจต้องการทำมุมรังสีเหล่านี้เข้าด้านในเล็กน้อยเพื่อว่าหากแมงมุมเดินผ่านขอบหน้าผา 90 องศารังสีที่ยื่นออกมาจะกระทบกับหน้าผา
ทีมฐานดาวเคราะห์น้อยก็ทำการถ่ายภาพรังสีระยะสั้นในทิศทางของการเคลื่อนที่ของวอล์คเกอร์ (ไม่แสดง) ซึ่งจะแทนที่รังสีในด้านนั้นถ้ามันกระทบกับภูมิประเทศ เพื่อให้แน่ใจว่าวอล์คเกอร์จะไม่ติดขัดเมื่อเดินเข้าไปในมุมเว้า 90 องศา
อ้างอิงจากเอกสาร, 2D raycast แตกต่างจาก 3D ในการตรวจจับ colliders ภายในที่รังสีเริ่มต้น ฟังดูแปลกสำหรับฉัน แต่ถ้าการทดสอบของคุณยืนยันสิ่งนี้คุณจะต้องใช้ layerMask เพื่อ จำกัด รังสีที่จะตรวจจับ colliders ภูมิประเทศที่ไต่ขึ้นได้เท่านั้น