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

4.2 การเขียนโค้ดควบคุมการเคลื่อนไหวของตัวละคร

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

การเขียนสคริปต์ควบคุมการเคลื่อนที่ในทิศทางต่าง ๆ

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

1. โค้ดควบคุมการเคลื่อนที่ในทิศทางต่าง ๆ (เดินหน้า, ถอยหลัง, ซ้าย, ขวา):

ตัวอย่างการเขียนสคริปต์สำหรับควบคุมการเคลื่อนที่ของตัวละครเมื่อผู้เล่นกดปุ่มลูกศรบนคีย์บอร์ด:


using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed = 5.0f;

    void Update()
    {
        // รับข้อมูลการกดปุ่มลูกศร
        float moveHorizontal = Input.GetAxis("Horizontal"); // เคลื่อนที่ในแนวนอน (ซ้าย-ขวา)
        float moveVertical = Input.GetAxis("Vertical"); // เคลื่อนที่ในแนวตั้ง (เดินหน้า-ถอยหลัง)

        // คำนวณการเคลื่อนไหว
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        // ปรับตำแหน่งของตัวละครตามการเคลื่อนไหวและความเร็วที่กำหนด
        transform.Translate(movement * speed * Time.deltaTime, Space.World);
    }
}

ในโค้ดนี้:

    • เราใช้ Input.GetAxis("Horizontal") และ Input.GetAxis("Vertical") เพื่อรับข้อมูลจากปุ่มลูกศรหรือปุ่ม WASD ที่ผู้เล่นกด
    • Translate() จะเคลื่อนย้ายตัวละครตามเวกเตอร์ที่คำนวณไว้ โดยเราจะคูณด้วย speed และ Time.deltaTime เพื่อให้การเคลื่อนที่เป็นไปตามความเร็วที่กำหนด

การเขียนโค้ดเพื่อให้วัตถุหมุนหรือเปลี่ยนขนาด

1. การหมุนวัตถุ:

เราสามารถทำให้วัตถุหมุนรอบแกนต่าง ๆ ได้โดยใช้ฟังก์ชัน Rotate() ซึ่งจะทำให้วัตถุหมุนตามมุมที่เรากำหนด ตัวอย่างโค้ดการหมุนวัตถุรอบแกน Y:


using UnityEngine;

public class RotateObject : MonoBehaviour
{
    public float rotationSpeed = 100.0f;

    void Update()
    {
        // หมุนวัตถุรอบแกน Y
        transform.Rotate(0, rotationSpeed * Time.deltaTime, 0);
    }
}

ในโค้ดนี้:

    • transform.Rotate() ทำให้วัตถุหมุนรอบแกน Y ด้วยความเร็วที่กำหนด (rotationSpeed) ในทุกเฟรม

2. การเปลี่ยนขนาดของวัตถุ:

การเปลี่ยนแปลงขนาดของวัตถุทำได้โดยการปรับค่าของ Transform.Scale ตัวอย่างโค้ดการเพิ่มขนาดของวัตถุเมื่อกดปุ่ม:


using UnityEngine;

public class ScaleObject : MonoBehaviour
{
    public float scaleSpeed = 1.0f;

    void Update()
    {
        // กดปุ่ม Space เพื่อขยายขนาดของวัตถุ
        if (Input.GetKey(KeyCode.Space))
        {
            // เพิ่มขนาดของวัตถุในทุกแกน
            transform.localScale += new Vector3(scaleSpeed * Time.deltaTime, scaleSpeed * Time.deltaTime, scaleSpeed * Time.deltaTime);
        }
    }
}

ในโค้ดนี้:

    • เมื่อผู้เล่นกดปุ่ม Space วัตถุจะเพิ่มขนาดในแกน X, Y, และ Z โดยความเร็วในการขยายจะขึ้นอยู่กับค่า scaleSpeed

สรุป:
  • เราสามารถควบคุมการเคลื่อนที่ของตัวละครหรือวัตถุได้โดยการใช้ฟังก์ชัน Translate() เพื่อเคลื่อนที่ในทิศทางต่าง ๆ ตามปุ่มที่ผู้เล่นกด
  • การหมุนวัตถุสามารถทำได้โดยใช้ Rotate() เพื่อทำให้วัตถุหมุนตามแกนต่าง ๆ
  • การเปลี่ยนขนาดของวัตถุสามารถทำได้โดยการปรับค่า Transform.localScale