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

1. หมุนวัตถุโดยตรง (Transform.Rotate)
วิธีนี้เหมาะสำหรับการหมุนวัตถุอย่างต่อเนื่องหรือหมุนตามแกนที่กำหนด โดยไม่ต้องใช้ฟิสิกส์ (Rigidbody)
C#
using UnityEngine;
public class ObjectRotator : MonoBehaviour
{
public float rotationSpeed = 50f; // ความเร็วในการหมุน (องศาต่อวินาที)
public Vector3 rotationAxis = Vector3.up; // แกนในการหมุน (เช่น Vector3.up คือหมุนรอบแกน Y)
void Update()
{
// หมุนวัตถุอย่างต่อเนื่องรอบแกนที่กำหนด
// Time.deltaTime ทำให้การหมุนราบรื่นและไม่ขึ้นกับ Frame Rate
transform.Rotate(rotationAxis * rotationSpeed * Time.deltaTime);
// ตัวอย่างการหมุนรอบหลายแกนพร้อมกัน:
// transform.Rotate(new Vector3(1, 1, 1) * rotationSpeed * Time.deltaTime);
// ตัวอย่างการหมุนตามแกนของโลก (World Space)
// transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime, Space.World);
// ตัวอย่างการหมุนตามแกนของวัตถุเอง (Local Space) - เป็นค่าเริ่มต้น
// transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime, Space.Self);
}
}
คำอธิบาย Transform.Rotate
:
rotationSpeed
: กำหนดความเร็วในการหมุนเป็นองศาต่อวินาทีrotationAxis
: กำหนดแกนที่ต้องการให้วัตถุหมุนรอบ:Vector3.up
(0, 1, 0): หมุนรอบแกน Y (เหมือนลูกโลกหมุนรอบตัวเอง)Vector3.right
(1, 0, 0): หมุนรอบแกน XVector3.forward
(0, 0, 1): หมุนรอบแกน Z- คุณสามารถกำหนดเป็นค่าอื่นๆ ได้ เช่น
new Vector3(0.5f, 1f, 0.2f)
Time.deltaTime
: ทำให้การหมุนเป็นไปอย่างราบรื่น ไม่ขึ้นอยู่กับ Frame Rate ของเกมSpace.World
vsSpace.Self
:Space.World
: หมุนรอบแกนของโลก (เช่นVector3.up
คือแกน Y ของโลกเสมอ)Space.Self
(ค่าเริ่มต้น): หมุนรอบแกนของวัตถุเอง (แกน Y ของวัตถุอาจจะชี้ไปคนละทางกับแกน Y ของโลก หากวัตถุถูกหมุนอยู่แล้ว)
2. หมุนวัตถุไปยังทิศทางที่ต้องการ (Quaternion.Slerp / LookRotation)
วิธีนี้เหมาะสำหรับการหันวัตถุให้ชี้ไปยังจุดเป้าหมาย หรือหันไปในทิศทางที่กำหนดอย่างเป็นธรรมชาติ
C#
using UnityEngine;
public class ObjectLookAtTarget : MonoBehaviour
{
public Transform target; // วัตถุเป้าหมายที่ต้องการให้หันไปหา
public float rotationSpeed = 5f; // ความเร็วในการหมุน (ยิ่งค่าน้อยยิ่งหมุนช้าและนุ่มนวล)
void Update()
{
if (target != null)
{
// 1. คำนวณทิศทางจากวัตถุนี้ไปยังเป้าหมาย
Vector3 directionToTarget = target.position - transform.position;
// ตรวจสอบเพื่อหลีกเลี่ยงข้อผิดพลาดถ้าทิศทางเป็นศูนย์
if (directionToTarget != Vector3.zero)
{
// 2. สร้าง Quaternion (การหมุน) ที่จะทำให้แกน Z ของวัตถุหันไปทางเป้าหมาย
// Quaternion.LookRotation จะทำให้ transform.forward ชี้ไปยังทิศทางที่กำหนด
Quaternion targetRotation = Quaternion.LookRotation(directionToTarget);
// 3. ค่อยๆ หมุนวัตถุจากตำแหน่งปัจจุบันไปยังการหมุนเป้าหมายอย่างนุ่มนวล
// Quaternion.Slerp (Spherical Linear Interpolation) เหมาะกับการหมุนที่นุ่มนวล
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);
// ทางเลือก: Quaternion.RotateTowards จะหมุนไปหาเป้าหมายด้วยความเร็วคงที่
// transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, rotationSpeed * 360 * Time.deltaTime);
// (ต้องคูณ 360 เพราะ Slerp ใช้ค่าระหว่าง 0-1 ส่วน RotateTowards ใช้องศา)
}
}
}
}
คำอธิบาย Quaternion.Slerp / LookRotation
:
target
: กำหนดTransform
ของวัตถุเป้าหมายที่คุณต้องการให้วัตถุนี้หันไปหาdirectionToTarget
: คำนวณเวกเตอร์ทิศทางจากตำแหน่งของวัตถุคุณไปยังตำแหน่งของเป้าหมายQuaternion.LookRotation(directionToTarget)
: สร้างค่าการหมุน (Quaternion) ที่จะทำให้ด้านหน้าของวัตถุ (transform.forward
) ชี้ไปในทิศทางของdirectionToTarget
Quaternion.Slerp(จาก, ไปยัง, อัตราส่วน)
: เป็นฟังก์ชันที่ใช้ในการหมุนอย่างนุ่มนวล (interpolates) ระหว่างการหมุนปัจจุบัน (transform.rotation
) ไปยังการหมุนเป้าหมาย (targetRotation
) โดยrotationSpeed * Time.deltaTime
จะเป็น “อัตราส่วน” ว่าในแต่ละเฟรมจะหมุนไปได้มากน้อยแค่ไหน (ค่า 0 คือไม่หมุนเลย, ค่า 1 คือหมุนไปถึงเป้าหมายทันที)
วิธีใช้งานใน Unity:
- สร้างสคริปต์ C# ใหม่ (เช่น
ObjectRotator
หรือObjectLookAtTarget
) - คัดลอกโค้ด ที่ต้องการไปวางในสคริปต์นั้น
- ลากสคริปต์ ไปวางบน GameObject ที่คุณต้องการให้หมุนใน Hierarchy
- หากใช้สคริปต์
ObjectLookAtTarget
ให้ ลาก GameObject เป้าหมาย (เช่น ตัวละคร, จุดว่างๆ) ไปใส่ในช่องTarget
ใน Inspector ของสคริปต์ - ปรับค่า
Rotation Speed
ใน Inspector เพื่อให้ได้ผลลัพธ์การหมุนที่คุณต้องการ