ฉันจะทำให้ตัวละครสามารถเดินบนกำแพงได้อย่างไร


34

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

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

ฉันได้ดูส่วนประกอบ Unity 2D ที่หลากหลายด้วยความสำเร็จเพียงเล็กน้อย :(

ขอบเขตการชนในโลกส่วนใหญ่ของฉันถูกทำเครื่องหมายด้วยส่วนประกอบ Collider 2D (ซึ่งทำงานได้ดีกับลูกบอลง่าย ๆ ที่ได้รับผลกระทบจากแรงโน้มถ่วง แต่น้อยกว่าด้วยตัวละครแมงมุมนี้)


1
เกมนั้น: youtube.com/watch?v=ga4Zqq1tXa8 ("Spider" บน PS1 ฉันเล่นมานานแล้ว) อาจเป็นแหล่งของแรงบันดาลใจ
tigrou

คำตอบ:


43

ฉันกำลังจะโพสต์ลิงค์ไปยังบล็อก Asteroid Baseบนศัตรูวอล์คเกอร์เมื่อฉันสังเกตเห็นว่าคาร์มิงตันเชื่อมโยงกับบทความ Gamasutraในความคิดเห็นแล้ว

มันอาจคุ้มค่าที่จะให้ทัศนวิสัยและคำอธิบายมากกว่านี้เป็นคำตอบในตัวของมันเอง

ฉันกำลังเดินอยู่บนลำแสง o-oh!

เคล็ดลับคือraycasts สิ่งเหล่านี้ทำให้โค้ดของคุณสแกนไปตามเส้นเพื่อชนกัน

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

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

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

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

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

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

อ้างอิงจากเอกสาร, 2D raycast แตกต่างจาก 3D ในการตรวจจับ colliders ภายในที่รังสีเริ่มต้น ฟังดูแปลกสำหรับฉัน แต่ถ้าการทดสอบของคุณยืนยันสิ่งนี้คุณจะต้องใช้ layerMask เพื่อ จำกัด รังสีที่จะตรวจจับ colliders ภูมิประเทศที่ไต่ขึ้นได้เท่านั้น


ฉันสามารถยืนยันได้ว่า raycasts 2D จะตรวจจับ colliders ซึ่งมีจุดเริ่มต้นของ raycast สิ่งนี้สามารถถูกกรองได้อย่างง่ายดายแม้ว่าการตรวจจับครั้งแรกนั้นจะถูกส่งคืนด้วยระยะห่าง 0 เสมอและตรงข้ามกับทิศทางปกติของ raycast
XenoRo

2

คุณจะต้องใช้รหัสที่กำหนดเองสำหรับสิ่งนี้

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

มันจะไม่ง่ายเลยที่จะทำให้ดีจริง ๆ แต่มันควรจะเป็นความท้าทายที่ดีที่จะทำให้มันทำงานได้


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