บทที่ 4: การเขียนสคริปต์เบื้องต้น (Basic Scripting)

4.1 การเขียน C# ใน Unity

การเขียนโค้ดใน Unity เป็นส่วนสำคัญในการกำหนดพฤติกรรมและการทำงานของวัตถุในเกม โดย Unity ใช้ภาษา C# ในการเขียนสคริปต์ การเขียนสคริปต์เบื้องต้นใน Unity ไม่ซับซ้อนและสามารถทำได้ง่าย ๆ โดยเริ่มจากการสร้างสคริปต์และเพิ่มเข้าไปใน GameObject

การเพิ่ม Script ให้กับ GameObject

1. การสร้างสคริปต์ใหม่:

    • ใน Project Window คลิกขวาที่พื้นที่ว่างแล้วเลือก Create > C# Script จากนั้นตั้งชื่อสคริปต์ที่ต้องการ ตัวอย่างเช่น PlayerController เพื่อควบคุมการเคลื่อนที่ของตัวละคร
    • เมื่อสร้างสคริปต์เสร็จแล้ว จะมีไฟล์สคริปต์ที่สามารถแก้ไขได้ในโปรแกรมแก้ไขโค้ด (Code Editor) เช่น Visual Studio

2. การเพิ่มสคริปต์ให้กับ GameObject:

    • หลังจากสร้างสคริปต์แล้ว คุณสามารถเพิ่มสคริปต์นั้นให้กับ GameObject ใน Scene ได้โดย:
      • ลากไฟล์สคริปต์จาก Project Window ลงไปใน GameObject ที่ต้องการใน Hierarchy หรือ Inspector
      • เมื่อเพิ่มสคริปต์แล้ว จะเห็นสคริปต์ปรากฏใน Inspector ของ GameObject นั้น
    • GameObject จะทำงานตามสคริปต์ที่เราเขียนไว้ในโค้ด ซึ่งเราสามารถแก้ไขโค้ดในไฟล์สคริปต์เพื่อกำหนดพฤติกรรมต่าง ๆ ของวัตถุได้

การทำงานของฟังก์ชัน Start() และ Update()

ใน Unity สคริปต์พื้นฐานจะมีฟังก์ชันที่สำคัญสองฟังก์ชันคือ Start() และ Update() ซึ่งจะถูกเรียกใช้ในเวลาที่แตกต่างกัน:

1. ฟังก์ชัน Start():

    • Start() คือฟังก์ชันที่ถูกเรียกใช้งานเพียงครั้งเดียวเมื่อวัตถุหรือ GameObject ที่สคริปต์ถูกแนบไปด้วยถูกสร้างขึ้นหรือเปิดใช้งาน
    • ฟังก์ชันนี้เหมาะสำหรับการกำหนดค่าหรือการตั้งค่าเริ่มต้นที่ต้องการเพียงครั้งเดียว เช่น การกำหนดตำแหน่งเริ่มต้นของตัวละคร หรือการโหลดข้อมูลบางอย่างในตอนเริ่มเกม
    • ตัวอย่างโค้ด:

void Start() {
    Debug.Log("Game Started!"); // แสดงข้อความใน Console เมื่อเกมเริ่ม
}

2. ฟังก์ชัน Update():

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

void Update() {
    transform.Translate(0, 0, 1 * Time.deltaTime); // ทำให้วัตถุเคลื่อนที่ไปข้างหน้าอย่างต่อเนื่อง
}

ในตัวอย่างข้างต้น:

  • Start() จะถูกเรียกเพียงครั้งเดียวเมื่อเริ่มเกม
  • Update() จะถูกเรียกทุกเฟรมทำให้วัตถุเคลื่อนไหวอย่างต่อเนื่อง ซึ่งในกรณีนี้วัตถุจะเคลื่อนไปข้างหน้าในแกน Z โดยความเร็วจะขึ้นอยู่กับเวลา (Time.deltaTime)

หมายเหตุ: การใช้ Start() และ Update() อย่างเหมาะสมจะช่วยให้การควบคุมพฤติกรรมของ GameObject เป็นไปตามที่ต้องการ และสามารถสร้างการโต้ตอบที่เหมาะสมกับผู้เล่นได้