การเขียนโค้ดสำหรับให้ Camera ติดตาม Player ใน Unity


การเขียนโค้ดสำหรับให้ Camera ติดตาม Player ใน Unity

การที่กล้อง (Camera) ติดตามตัวละคร (Player) เป็นฟังก์ชันที่สำคัญในเกมส่วนใหญ่ เพื่อให้ผู้เล่นมองเห็นการเคลื่อนไหวของตัวละครได้อย่างต่อเนื่อง มีหลายวิธีในการเขียนโค้ดเพื่อให้กล้องติดตาม Player โดยจะแนะนำวิธีที่นิยมและใช้งานง่ายที่สุดคือการใช้ LateUpdate() และการกำหนด Offset ครับ

ทำไมต้องใช้ LateUpdate()?

LateUpdate() เป็นฟังก์ชันที่ถูกเรียกหลังจากที่ฟังก์ชัน Update() ทั้งหมดในเฟรมนั้นถูกเรียกเรียบร้อยแล้ว การใช้ LateUpdate() ในการควบคุมกล้องจะช่วยให้มั่นใจได้ว่า Player ได้เคลื่อนที่ไปยังตำแหน่งสุดท้ายของเฟรมนั้นแล้ว ก่อนที่กล้องจะเคลื่อนที่ตาม ซึ่งจะช่วยลดปัญหาการสั่นไหว (Jittering) ของกล้องได้เป็นอย่างดี

โค้ดสำหรับ Camera ติดตาม Player

คุณสามารถสร้าง C# Script ใหม่ ตั้งชื่อว่า “CameraFollow” หรือชื่ออื่น ๆ ที่คุณต้องการ แล้วคัดลอกโค้ดด้านล่างไปวางได้เลยครับ

C#

using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    public Transform player; // อ้างอิงถึง Transform ของ Player ที่ต้องการให้กล้องติดตาม
    public Vector3 offset; // ระยะห่างระหว่างกล้องกับ Player

    // LateUpdate ถูกเรียกหลังจาก Update ทั้งหมด
    void LateUpdate()
    {
        // ตรวจสอบว่า player ไม่เป็น null เพื่อป้องกัน Error
        if (player != null)
        {
            // กำหนดตำแหน่งใหม่ของกล้องให้เป็นตำแหน่งของ Player บวกด้วย offset
            transform.position = player.position + offset;
        }
    }
}

วิธีการตั้งค่าใน Unity

  1. สร้าง Script: ในโปรเจกต์ Unity ให้คลิกขวาในโฟลเดอร์ Project -> Create -> C# Script แล้วตั้งชื่อว่า CameraFollow
  2. คัดลอกโค้ด: เปิดไฟล์ CameraFollow.cs ที่สร้างขึ้น แล้วคัดลอกโค้ดด้านบนไปวางทับโค้ดเดิมทั้งหมด
  3. แนบ Script เข้ากับ Main Camera: ลากไฟล์ CameraFollow.cs ไปวางบน Main Camera ใน Hierarchy หรือเลือก Main Camera แล้วกด Add Component -> ค้นหา CameraFollow
  4. กำหนด Player และ Offset:
    • เลือก Main Camera ใน Hierarchy
    • ใน Inspector จะเห็น Component CameraFollow (Script) ที่คุณเพิ่งเพิ่มเข้าไป
    • Player: ลาก GameObject ของ Player ของคุณ (เช่น Player หรือ Cube ที่เป็นตัวละครของคุณ) จาก Hierarchy ไปวางในช่อง Player ใน Inspector
    • Offset: กำหนดค่า offset ใน Inspector ซึ่งเป็นระยะห่างที่กล้องจะอยู่จาก Player
      • ลองเริ่มจากค่าประมาณ (X: 0, Y: 5, Z: -10) ซึ่งหมายถึงกล้องจะอยู่สูงขึ้นไป 5 หน่วย และถอยหลังไป 10 หน่วยจาก Player (ค่า Z เป็นลบจะทำให้กล้องอยู่ด้านหลัง)
      • คุณสามารถปรับค่าเหล่านี้ได้ตามต้องการจนกว่าจะได้มุมมองที่เหมาะสมกับเกมของคุณ

ตัวอย่างการปรับ Offset

สมมติว่า Player ของคุณอยู่ที่ตำแหน่ง (0, 0, 0):

  • ถ้า offset เป็น (0, 5, -10) กล้องจะอยู่ที่ (0, 5, -10)
  • ถ้า Player เคลื่อนที่ไปที่ (2, 0, 5) กล้องจะเคลื่อนที่ไปที่ (2, 5, -5)

หวังว่าโค้ดและคำอธิบายนี้จะเป็นประโยชน์ในการพัฒนาเกมของคุณนะครับ! ถ้ามีคำถามเพิ่มเติมหรือต้องการให้ปรับปรุงโค้ดสำหรับสถานการณ์เฉพาะอื่นๆ สามารถสอบถามได้เลยครับ


การใช้โค้ด Camera Follow ระหว่าง 3D และ 2D ใน Unity

โค้ด Camera Follow ที่ให้ไปก่อนหน้านี้สามารถใช้งานได้ ทั้งในโปรเจกต์ 3D และ 2D ครับ โดยหลักการพื้นฐานของการติดตามตำแหน่ง (Position) นั้นเหมือนกัน ไม่ว่าจะอยู่ในมิติไหนก็ตาม

อย่างไรก็ตาม มีบางจุดที่คุณอาจจะต้องพิจารณาและปรับเปลี่ยนเล็กน้อยเพื่อให้เหมาะสมกับการใช้งานในแต่ละมิติ:

การใช้งานใน 3D

โค้ดที่คุณมีอยู่นั้นสมบูรณ์แบบสำหรับการติดตามใน 3D แล้วครับ โดยปกติแล้ว:

  • player (Transform): จะอ้างอิงถึง Transform ของ Player Object ในฉาก 3D ของคุณ
  • offset (Vector3): คุณจะใช้ค่า X, Y, Z เพื่อกำหนดระยะห่างของกล้องจาก Player ในทุกแกน เช่น (0, 5, -10) หมายถึงกล้องจะอยู่สูงขึ้นไป 5 หน่วยบนแกน Y และถอยหลังไป 10 หน่วยบนแกน Z จาก Player

คุณสามารถปรับค่า offset ได้อย่างอิสระเพื่อหามุมมองที่เหมาะสมสำหรับเกม 3D ของคุณ ไม่ว่าจะเป็นมุมมองบุคคลที่สาม (Third-person), มุมมองด้านบน (Top-down), หรือมุมมองแบบ Isometric

การใช้งานใน 2D

สำหรับ 2D โค้ดนี้ก็ยังคงใช้งานได้ เพียงแต่คุณอาจจะต้องการจำกัดการเคลื่อนไหวของกล้องให้อยู่ในระนาบ 2 มิติที่เหมาะสม และมุมมองของกล้องก็จะต้องถูกตั้งค่าให้ถูกต้อง:

  1. Orthographic Camera: ในเกม 2D ส่วนใหญ่ คุณจะใช้ Orthographic Camera แทน Perspective Camera เพื่อให้วัตถุดูมีขนาดเท่ากันหมดโดยไม่ขึ้นกับระยะทาง ซึ่งเหมาะสำหรับสไตล์ศิลปะ 2D
    • ไปที่ Main Camera ใน Inspector
    • เปลี่ยน Projection จาก Perspective เป็น Orthographic
    • ปรับ Size (สำหรับ Orthographic Camera) หรือ Field of View (สำหรับ Perspective Camera ที่ใช้ใน 2D บางประเภท) เพื่อควบคุมขนาดของพื้นที่ที่มองเห็น
  2. Offset ที่เหมาะสมกับ 2D:
    • โดยทั่วไปแล้ว ในเกม 2D คุณมักจะให้กล้องเคลื่อนที่ตาม Player แค่บนแกน X และ Y เท่านั้น และให้แกน Z คงที่ เพื่อรักษาระยะห่างจากฉาก
    • คุณอาจกำหนด offset ให้มีค่า Z เป็นลบมากพอ เพื่อให้กล้องอยู่ห่างจากฉาก 2D ของคุณอย่างเหมาะสม เช่น (0, 0, -10) หรือ (0, 2, -10) ขึ้นอยู่กับว่าคุณต้องการให้กล้องอยู่สูงกว่า Player บนแกน Y หรือไม่
    • ตัวอย่าง: ถ้า Player อยู่ที่ (X, Y, 0) และ offset เป็น (0, 0, -10) กล้องจะอยู่ที่ (X, Y, -10) ทำให้กล้องมองลงมาที่ฉาก 2D ได้พอดี
    C#// ตัวอย่างการตั้งค่า offset สำหรับ 2D public Vector3 offset = new Vector3(0f, 0f, -10f); // กล้องอยู่บนระนาบเดียวกับ Player แต่ถอยไปในแกน Z // หรืออาจจะให้กล้องอยู่สูงขึ้นเล็กน้อย // public Vector3 offset = new Vector3(0f, 2f, -10f);

สรุป

โค้ด CameraFollow พื้นฐานนั้นมีความยืดหยุ่นสูงและสามารถใช้ได้ทั้ง 3D และ 2D ครับ สิ่งที่คุณต้องคำนึงถึงคือ:

  • การตั้งค่า Camera Component: การเลือก Perspective หรือ Orthographic และการปรับค่า Field of View หรือ Size
  • ค่า Offset: การปรับค่า offset ให้เหมาะสมกับมิติของเกมที่คุณกำลังพัฒนา เพื่อให้ได้มุมมองที่ต้องการ

ดังนั้น คุณไม่จำเป็นต้องเขียนโค้ดต่างกันมากนัก เพียงแค่ปรับการตั้งค่าใน Unity Editor และค่า offset ใน Script ให้เข้ากับแต่ละมิติเท่านั้นเองครับ

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

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

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

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

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