Unity - การเขียนสคริปต์การเคลื่อนไหวพื้นฐาน

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

จำไว้ว่า GameObject ทุกตัวมีองค์ประกอบอย่างน้อยหนึ่งอย่าง - Transform. สิ่งที่พิเศษคือ Transform ของ gameObject ยังแสดงเป็นตัวแปรในด้านสคริปต์ของ Unity เพื่อให้เราสามารถแก้ไขได้โดยใช้รหัส สิ่งนี้ไม่ได้ จำกัด เฉพาะการแปลงร่างอย่างใดอย่างหนึ่ง ส่วนประกอบทั้งหมดใน Unity มีคุณสมบัติซึ่งสามารถเข้าถึงได้ผ่านตัวแปรในการเขียนสคริปต์

เริ่มต้นด้วยสคริปต์การเคลื่อนไหวของเรา สร้างสคริปต์ใหม่และตั้งชื่อว่า "การเคลื่อนไหว"

ตอนนี้เปิดสคริปต์และคุณจะเห็นสิ่งเดียวกับที่คุณเห็นในบทเรียนที่แล้ว

ให้เราสร้างตัวแปรลอยสาธารณะชื่อ speed. สร้างตัวแปรpublic ใน Unity มีข้อได้เปรียบอย่างมาก -

  • ตัวแปรจะแสดงเป็นช่องที่แก้ไขได้ภายในโปรแกรมแก้ไขดังนั้นคุณไม่จำเป็นต้องปรับค่าในโค้ดด้วยตนเอง

public class Movement : MonoBehaviour {
   public float speed;
}

หากเราบันทึกสคริปต์นี้โดยไม่ต้องแตะวิธีการอื่นควรรวบรวมใน Unity

(คุณสามารถดูได้ว่ากำลังรวบรวมโดย

ไอคอนที่มุมล่างขวา)

ต่อไป, drag and dropสคริปต์จาก Assets ไปยัง GameObject หากคุณทำอย่างถูกต้องนี่คือสิ่งที่คุณควรเห็นในคุณสมบัติของ GameObject -

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

ตอนนี้ให้เราพิจารณาวัตถุประสงค์ของวิธีการอัปเดต -

  • ตรวจสอบอินพุตของผู้ใช้

  • หากมีอินพุตของผู้ใช้โปรดอ่านทิศทางของอินพุต

  • เปลี่ยนค่าตำแหน่งของการแปลงของวัตถุตามความเร็วและทิศทางของวัตถุ ในการทำเช่นนั้นเราจะเพิ่มรหัสต่อไปนี้ -

void Update() {
   float h = Input.GetAxisRaw(“Horizontal”);
   float v = Input.GetAxisRaw(“Vertical”);
   
   gameObject.transform.position = new Vector2 (transform.position.x + (h * speed), 
      transform.position.y + (v * speed));

ตอนนี้ให้เราพูดคุยเกี่ยวกับรหัสใน Breif

ก่อนอื่นเราสร้างตัวแปรทศนิยมชื่อ h (สำหรับแนวนอน) และค่าของมันถูกกำหนดโดย Input.GetAxisRawวิธี. วิธีนี้จะคืนค่า -1, 0 หรือ 1 ขึ้นอยู่กับว่าผู้เล่นกดปุ่มใดบนลูกศรขึ้น / ลง / ซ้าย / ขวา

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

ต่อไปเราคือ updating ตำแหน่งของ gameObject ของเราไปยังตำแหน่งใหม่ที่กำหนดโดยการสร้างไฟล์ Vector2. Vector2 ใช้พารามิเตอร์ 2 ตัวซึ่งเป็นพารามิเตอร์x and yค่าตามลำดับ สำหรับค่า x เราระบุผลรวมของวัตถุcurrent ตำแหน่งและมัน speedเพิ่มจำนวนอย่างมีประสิทธิภาพทุกเฟรมที่กดปุ่มไปที่ตำแหน่ง

บันทึกสคริปต์นี้และกลับไปที่ Unity Unity จะอัปเดตสคริปต์ทั้งหมดโดยอัตโนมัติเมื่อคอมไพล์สำเร็จคุณจึงไม่ต้องแนบสคริปต์ซ้ำแล้วซ้ำอีก

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

ตอนนี้คลิก Play และพบกับเกมเล็ก ๆ เกมแรกของคุณ!

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

ในบทเรียนถัดไปเราจะได้เรียนรู้เกี่ยวกับร่างกายแข็งและการชนกัน