การเขียนโค้ดสำหรับให้ 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
- สร้าง Script: ในโปรเจกต์ Unity ให้คลิกขวาในโฟลเดอร์ Project -> Create -> C# Script แล้วตั้งชื่อว่า
CameraFollow
- คัดลอกโค้ด: เปิดไฟล์
CameraFollow.cs
ที่สร้างขึ้น แล้วคัดลอกโค้ดด้านบนไปวางทับโค้ดเดิมทั้งหมด - แนบ Script เข้ากับ Main Camera: ลากไฟล์
CameraFollow.cs
ไปวางบนMain Camera
ใน Hierarchy หรือเลือกMain Camera
แล้วกด Add Component -> ค้นหาCameraFollow
- กำหนด 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 มิติที่เหมาะสม และมุมมองของกล้องก็จะต้องถูกตั้งค่าให้ถูกต้อง:
- Orthographic Camera: ในเกม 2D ส่วนใหญ่ คุณจะใช้ Orthographic Camera แทน Perspective Camera เพื่อให้วัตถุดูมีขนาดเท่ากันหมดโดยไม่ขึ้นกับระยะทาง ซึ่งเหมาะสำหรับสไตล์ศิลปะ 2D
- ไปที่
Main Camera
ใน Inspector - เปลี่ยน
Projection
จากPerspective
เป็นOrthographic
- ปรับ
Size
(สำหรับ Orthographic Camera) หรือField of View
(สำหรับ Perspective Camera ที่ใช้ใน 2D บางประเภท) เพื่อควบคุมขนาดของพื้นที่ที่มองเห็น
- ไปที่
- 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 ได้พอดี
// ตัวอย่างการตั้งค่า 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 ให้เข้ากับแต่ละมิติเท่านั้นเองครับ