บทที่ 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