Code Unity การให้วัตถุ เคลื่อนที่เข้าหาเป้าหมาย
การให้วัตถุ เคลื่อนที่เข้าหาเป้าหมาย ด้วยนอกจากการหันหน้า ก็สามารถทำได้โดยการเพิ่มโค้ดในส่วน Update()
เพื่อปรับตำแหน่งของวัตถุ

การเคลื่อนที่เข้าหาเป้าหมาย
เราจะเพิ่มตัวแปรสำหรับ ความเร็วในการเคลื่อนที่ และใช้ Vector3.MoveTowards()
หรือการจัดการ transform.position
โดยตรงครับ
C#
using UnityEngine;
public class ObjectLookAtAndMoveToTarget : MonoBehaviour
{
public Transform target; // วัตถุเป้าหมายที่ต้องการให้หันไปหาและเคลื่อนที่เข้าหา
public float rotationSpeed = 5f; // ความเร็วในการหมุน (ยิ่งค่าน้อยยิ่งหมุนช้าและนุ่มนวล)
public float moveSpeed = 3f; // ความเร็วในการเคลื่อนที่เข้าหาเป้าหมาย (หน่วยต่อวินาที)
void Update()
{
if (target != null)
{
// 1. คำนวณทิศทางจากวัตถุนี้ไปยังเป้าหมาย
Vector3 directionToTarget = target.position - transform.position;
// ตรวจสอบเพื่อหลีกเลี่ยงข้อผิดพลาดถ้าทิศทางเป็นศูนย์
if (directionToTarget != Vector3.zero)
{
// --- ส่วนที่ 1: การหมุนวัตถุให้หันหน้าเข้าหาเป้าหมาย ---
// สร้าง Quaternion (การหมุน) ที่จะทำให้แกน Z ของวัตถุหันไปทางเป้าหมาย
Quaternion targetRotation = Quaternion.LookRotation(directionToTarget);
// ค่อยๆ หมุนวัตถุจากตำแหน่งปัจจุบันไปยังการหมุนเป้าหมายอย่างนุ่มนวล
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);
// --- ส่วนที่ 2: การเคลื่อนที่วัตถุเข้าหาเป้าหมาย ---
// เคลื่อนที่วัตถุจากตำแหน่งปัจจุบันไปยังตำแหน่งเป้าหมาย
// Vector3.MoveTowards(ตำแหน่งปัจจุบัน, ตำแหน่งเป้าหมาย, ระยะทางสูงสุดที่จะเคลื่อนที่ได้ในเฟรมนี้)
transform.position = Vector3.MoveTowards(transform.position, target.position, moveSpeed * Time.deltaTime);
}
}
}
}
จุดที่เพิ่มเข้ามาและคำอธิบาย:
public float moveSpeed = 3f;
:- เพิ่มตัวแปรสาธารณะ
moveSpeed
เพื่อควบคุม ความเร็วในการเคลื่อนที่ ของวัตถุ หน่วยเป็นหน่วยต่อวินาที (meters per second) คุณสามารถปรับค่านี้ได้ใน Inspector ของ Unity
- เพิ่มตัวแปรสาธารณะ
transform.position = Vector3.MoveTowards(transform.position, target.position, moveSpeed * Time.deltaTime);
:- นี่คือหัวใจของการเคลื่อนที่เข้าหาเป้าหมาย
Vector3.MoveTowards()
: เป็นฟังก์ชันที่สะดวกมากสำหรับวัตถุที่ไม่ใช่ Rigidbody มันจะคำนวณตำแหน่งใหม่ที่อยู่บนเส้นตรงระหว่างcurrent
และtarget
โดยเลื่อนไปไม่เกินmaxDistanceDelta
transform.position
: ตำแหน่งปัจจุบันของวัตถุtarget.position
: ตำแหน่งของวัตถุเป้าหมายmoveSpeed * Time.deltaTime
: คือระยะทางสูงสุดที่วัตถุจะสามารถเคลื่อนที่ได้ในหนึ่งเฟรม ทำให้การเคลื่อนที่ราบรื่นและไม่ขึ้นกับ Frame Rate
วิธีใช้งานใน Unity:
- สร้างสคริปต์ C# ใหม่ ชื่อ
ObjectLookAtAndMoveToTarget
แล้วคัดลอกโค้ดข้างต้นไปวาง - ลากสคริปต์นี้ ไปวางบน GameObject ที่คุณต้องการให้เคลื่อนที่
- ใน Inspector ของ GameObject นั้น คุณจะเห็นช่องสำหรับ
Target
,Rotation Speed
, และMove Speed
Target
: ลาก GameObject เป้าหมายที่คุณต้องการให้เคลื่อนที่เข้าหา มาใส่ในช่องนี้Rotation Speed
: ปรับความเร็วในการหมุนMove Speed
: ปรับความเร็วในการเคลื่อนที่
- รันเกม คุณจะเห็นวัตถุของคุณหันหน้าเข้าหาเป้าหมายและเคลื่อนที่เข้าหาอย่างต่อเนื่อง