ในตอนเริ่มต้น ให้เพิ่มสคริปต์ใหม่ให้กับตัวละครของคุณ ตั้งชื่อมันว่า PlayerMovement Script อันดับแรก เราต้องการข้อมูลอ้างอิงจากสคริปต์การเคลื่อนไหวของผู้เล่นไปยังตัวควบคุมตัวละคร สคริปต์บอกให้ย้ายตัวละคร
ในตอนเริ่มต้นเราสร้างตัวแปร:
คอนโทรลเลอร์ CharacterController2D สาธารณะ;
จากนั้นคุณมีตัวเลือกในการลากตัวควบคุมอักขระไปยังพื้นที่ว่าง
ต้องกำหนดทิศทางและความเร็วของการเคลื่อนที่สำหรับการเคลื่อนที่ สำหรับสิ่งนี้คุณต้องป้อนข้อมูลจากเครื่องเล่น:
ปุ่มลูกศรซ้ายหรือ A = 1
ปุ่มลูกศรขวาหรือ D = -1
มันเหมือนกันกับคอนโทรลเลอร์
แนวนอนMove = Input.GetAxisRaw ("แนวนอน");
พื้นที่อัปเดตจัดระเบียบอินพุตจากเครื่องเล่น
FixedUpdate ใช้สำหรับฟิสิกส์ จำเป็นต้องมีฟังก์ชันนี้
สร้างตัวแปรอื่น:
ลอยในแนวนอนย้าย = 0f;
FixedUpdate ย้ายตัวละคร
เป็นโมฆะ FixedUpdate ()
{
controller.Move (เลื่อนแนวนอน, เท็จ, เท็จ);
}
เท็จแรกหมายถึงว่าผู้เล่นไม่ควรหมอบและคนที่สองว่าเขาไม่ควรกระโดด
จำเป็นต้องมีคำจำกัดความสำหรับการย้ายใน Player Controller Script:
โมฆะสาธารณะ ย้าย (ลอย โบลหมอบ กระโดดบูล)
{}
เป็นตัวแปรถัดไปที่คุณต้องการ:
โฟลตสาธารณะ runSpeed = 40f;
อินพุตจากเครื่องเล่นคูณด้วยความเร็วในการวิ่ง:
แนวนอนMove = Input.GetAxisRaw ("แนวนอน") * runSpeed;
หากผู้เล่นเคลื่อนที่ไปทางซ้ายและขวา การย้ายจะอยู่ที่ -40 และ 40
การเคลื่อนไหวยังคูณด้วย Time.fixedDeltaTime
Time.fixedDeltaTime คือเวลานับตั้งแต่มีการเรียกฟังก์ชัน FixedUpdate ล่าสุด สิ่งนี้ระบุว่าการเคลื่อนไหวเกิดขึ้นในปริมาณเท่ากันไม่ว่าจะเรียกใช้ฟังก์ชันบ่อยเพียงใด ดังนั้นความเร็วของตัวละครจะเท่ากัน ไม่ว่าจะเป็นระบบหรือแพลตฟอร์มใดก็ตาม
ถ้าจำนำตกลงมาก็จะเลื่อนลงดินได้นิดหน่อย
นั่นคือเหตุผลที่ใน Rigidbody2D การตรวจจับการชนเปลี่ยนจากแบบไม่ต่อเนื่องเป็นแบบต่อเนื่อง
สำหรับการกระโดดจะตรวจสอบว่าเรากดปุ่มกระโดดหรือไม่:
ถ้า (input.GetButtonDown ("กระโดด"))
{
กระโดด = จริง;
}
สิ่งนี้ควรทำในฟังก์ชัน FixedUpdate ข้อมูลถูกถ่ายโอนด้วยตัวแปรบูลีน:
บูลกระโดด = เท็จ;
ตัวแปรการข้ามยังถูกเพิ่มภายใต้ FixedUpdate
เมื่อกดปุ่มกระโดด สคริปต์ PlayerMovement จะส่งต่อไปยังตัวควบคุมที่เราต้องการข้ามไป หลังจากนั้นก็จะเป็นอีกครั้ง
กระโดด = เท็จ;
จำเป็นต้องกำหนดสิ่งนี้เนื่องจากเราไม่ต้องการที่จะข้ามไปข้างหน้าตลอดไป
ปัญหาอีกประการหนึ่งคือเมื่อตัวละครพยายามกระโดดขึ้นไปบนแท่น มันจะติดอยู่ตรงนั้น ตัวละครควรเลื่อนลงและล้มลงบนสิ่งนี้ วัสดุฟิสิกส์เป็นสิ่งจำเป็นสำหรับสิ่งนี้ ภายใต้โครงการคลิกขวาสร้าง–> PhysicsMaterial2D
ตั้งชื่อมันว่าลื่น ตั้งค่าความเสียดทานและความเด้งเป็น 0 นำ PhysicsMaterial แล้วลากไปบนวัสดุจาก BoxCollider ของผู้เล่น
หากคุณกำหนด colliders หลายตัวสำหรับตัวเอก คุณยังสามารถกำหนดวัสดุฟิสิกส์ให้กับ colliders ตัวอื่นได้
เค้าโครงแป้นพิมพ์ถูกกำหนดผ่าน Unity InputManager คุณสามารถค้นหาได้ภายใต้การตั้งค่าโครงการ
คลิกขวาที่ปุ่มข้ามและเลือก Duplicate Array Element ตั้งชื่อมันว่า "หมอบ"
หากผู้เล่นต้องการเล่นด้วยปุ่มลูกศร ให้กำหนดปุ่มสำรอง
ทำซ้ำขั้นตอนตั้งแต่กระโดดไปจนถึงหมอบ:
เมื่อปล่อยปุ่มหมอบ ตัวละครควรหยุดหมอบลงด้วย มันเลยไม่ได้ผลเหมือนกับการกระโดด หากผู้เล่นต้องการเล่นด้วยปุ่มลูกศร ให้กำหนดปุ่มสำรอง
เพิ่มสิ่งต่อไปนี้ในฟังก์ชันอัปเดต:
อื่นถ้า (Input.GetButtonUp ("หมอบคลาน"))
{
หมอบ = เท็จ;
}
เพื่อให้ส่วนที่เกี่ยวข้องปรากฏในตัวควบคุมอักขระ คุณต้องเปลี่ยนจากส่วนส่วนตัวเป็นสาธารณะ:
ดึงอันนั้น Colliderซึ่งควรปิดการใช้งานในฟิลด์ที่เกี่ยวข้อง หากมี "เพดาน" อยู่เหนือคุณ ตัวละครของคุณจะช้าลงเมื่อคุณกดปุ่มหมอบลง