ทำกล้องให้ Zoom ได้แบบ Sniper

abee3-sniper20scope20border

สวัสดีครับ วันนี้ผมก็เอาทิปการเขียนเกมด้วย Unity มาฝากเพื่อนๆอีกเช่นเคยครับ โดยหัวข้อในวันนี้ก็คือการ Zoom กล้องนั่นเองครับ

เพื่อนๆหลายๆคนน่าจะเคยเล่นเกมแนว Fps กันมาบ้างไม่มากก็น้อยใช่ไหมครับ โดยการเล่นเกม Fps หรือ First person shooting นั้น ในทุกๆเกมก็จะมีฟังชั่นก์การซูมเพื่อให้เรายิงได้ง่ายขึ้น บางเกมก็เป็นทักษะติดตัวอาชะ บางเกมก็ขึ้นอยู่กับปืน วันนี้เราจะมาทำการ zoom ด้วย Unity กันครับ

01

จากภาพตัวอย่าง Scene ของผมได้ Import Character controller package เข้ามาแล้วก็สร้างพื้นด้วย Cube รวมไปถึงลาก Prefab FPSController มาใส่ไว้ใน Scene เรียบร้อยแล้วนะครับ รวมถึงลบ Maincamera ที่มากับ Default scene ไปแล้วครับ ถ้าเราลองกด Play เราก็สามารถเดินในฉากนี้ได้แล้วครับ

การทำให้กล้องเหมือนซูมเข้าไปนั้น เราจะไปจัดการพารามิเตอร์ที่ชื่อว่า Field of view ของกล้องแบบ Perspective ครับ

ซึ่งถ้าหากเราจะซูมโดยใช้กล้องแบบ Orthographic ก็ทำได้เหมือนกัน โดยปรับค่า Size ครับ

02

 

จากนั้นเราจะสร้างสคริปไว้ในกล้องเลย เพื่อให้ง่ายต่อการเข้าถึง Component Camera ครับ โดยที่นี่ผมตั้งชื่อว่า ZoomScript ครับ

03

 

มาดูสคริปภายใน ZoomScript กันครับ

04

 

ผมมีตัวแปรทั้งหมด 4 ตัวครับ

zoom  – กำหนดค่า Field of view สูงสุดที่เราต้องการครับ ค่านี้ยิ่งน้อย ยิ่งซูมได้ไกล

normal – กำหนดค่า Field of view ปกติเวลาไม่ Zoom

delta – กำหนดความเร็วในการซูมเข้าซูมออก ค่านี้ยิ่งมากยิ่งซูมได้เร็วขึ้น

isZoomed – คอยเช็คว่าตอนนี้เรากำลังซูมเข้าหรือซูมออกครับ

05

สคริปหลักๆของเราจะอยู่ในฟังชั่นก์ Update ครับ

มาดูแต่ละส่วนกันครับ

if (Input.GetMouseButtonDown(1))

{

isZoomed = true;

}

 

if (Input.GetMouseButtonUp(1))

{

isZoomed = false;

}

 

ส่วนนี้เป็นการรับค่า Input ครับ โดยคลิกเม้าส์ขวาลงไปเพื่อ Zoom in และปล่อยเม้าส์ขวาเพื่อ Zoom out

if (isZoomed)

{

gameObject.GetComponent<Camera>().fieldOfView = Mathf.Lerp(gameObject.GetComponent<Camera>().fieldOfView, zoom, Time.deltaTime * delta);

}

else

{

gameObject.GetComponent<Camera>().fieldOfView = Mathf.Lerp(gameObject.GetComponent<Camera>().fieldOfView, normal, Time.deltaTime * delta);

}

ส่วนนี้คือส่วนที่เปลี่ยนค่า Field of view ครับ โดยหลักการทำงานของมันก็คือ มันจะไป Get component กล้องที่ติดอยู่กับเกมออบเจคชิ้นนี้ และ Lerp ค่า Field of view ให้เท่ากับค่า Zoom ที่เราตั้งไว้ โดยใช้เวลาส่วนต่างของเฟรม X ค่าตัวแปรครับ ไว้โอกาสหน้าผมจะเอาเรื่องของการใช้ Lerp มาแนะนำเพื่อนๆอีกทีครับ

ลองกด Play เพื่อเล่นดูครับ หากเราคลิกเม้าส์ขวาก็จะสามารถซูมได้แล้วครับ

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