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);
            }
        }
    }
}

จุดที่เพิ่มเข้ามาและคำอธิบาย:

  1. public float moveSpeed = 3f;:
    • เพิ่มตัวแปรสาธารณะ moveSpeed เพื่อควบคุม ความเร็วในการเคลื่อนที่ ของวัตถุ หน่วยเป็นหน่วยต่อวินาที (meters per second) คุณสามารถปรับค่านี้ได้ใน Inspector ของ Unity
  2. 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:

  1. สร้างสคริปต์ C# ใหม่ ชื่อ ObjectLookAtAndMoveToTarget แล้วคัดลอกโค้ดข้างต้นไปวาง
  2. ลากสคริปต์นี้ ไปวางบน GameObject ที่คุณต้องการให้เคลื่อนที่
  3. ใน Inspector ของ GameObject นั้น คุณจะเห็นช่องสำหรับ Target, Rotation Speed, และ Move Speed
    • Target: ลาก GameObject เป้าหมายที่คุณต้องการให้เคลื่อนที่เข้าหา มาใส่ในช่องนี้
    • Rotation Speed: ปรับความเร็วในการหมุน
    • Move Speed: ปรับความเร็วในการเคลื่อนที่
  4. รันเกม คุณจะเห็นวัตถุของคุณหันหน้าเข้าหาเป้าหมายและเคลื่อนที่เข้าหาอย่างต่อเนื่อง

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • เปิดใช้งานตลอด

บันทึกการตั้งค่า