บทเรียนต่อเนื่องสำหรับควบคุมมุมกล้องของ ตัวละครด้วย Mouse Movement และการออกแบบ Skyboxe ให้สวยงามสำหรับเกม 3 มิติบน Unity 3D อย่างง่ายบน Terrain ที่ออกแบบมา
บทเรียนก่อนหน้านี้
- เริ่มต้นเขียนเกม 3D ด้วย Unity
- เขียนเกม 3D ด้วย Unity การจัดการ Game Object ในเกม
- เขียนเกม 3D ด้วย Unity เรียกใช้งาน Physics กับ Rigidbody
- เขียนเกม 3D ด้วย Unity ศึกษา Basic Collision Detection
- เขียนเกม Unity3D การใช้ Asset Store และการสร้าง Terrain
เราจะหยิบบทเรียนบทก่อนที่สร้างขึ้นมาพัฒนาต่อในส่วนของ Skybox, Camera View, Mouse Move ครับ
จัดแสงส่วนของ Direction Light ให้เรียบร้อยสวยงาม จะวาง Plot Light ก็ได้นะครับ
ไปที่แถบเมนู Project กดปุ่ม Create สร้าง folder ขึ้นมาว่า Scripts และสร้างไฟล์ Javascript ใหม่ขึ้นมาวางไว้ในนั้นครับ ตั้งชื่อว่า Players.js
เปิด MonoDevelop ขึ้นมาเขียนคำสั่ง Javascript ดังนี้ครับ
#pragma strict var rotationSpeed : float = 10; var gravity : float = 50; private var yRot : float; function Update () { var Controller : CharacterController = GetComponent(CharacterController); var vertical : Vector3 = transform.TransformDirection(Vector3.forward); var horizontal : Vector3 = transform.TransformDirection(Vector3.right); var height : Vector3 = transform.TransformDirection(Vector3.up); if(Input.GetAxis("Mouse X")){ yRot += 10 * Input.GetAxis("Mouse X"); } transform.rotation = Quaternion.Euler(0, yRot, 0); Controller.Move(height * -gravity * Time.deltaTime); }
อธิบายคำสั่ง
var rotationSpeed : float = 10;
เป็นการกำหนดค่าความเร็วในการหมุน Rotate ของ GameObject
var gravity : float = 50;
เป็นการกำหนดค่าของ แรงดึงดูดที่จะใช้ในการคำนวณเล็กน้อยเพื่อให้ตัวละครของเราไม่ลอยเคว้งเวลาเริ่มเกม และหมุน หมุน
คำสั่ง GetAxis คือ รับค่าการกดปุ่มลูกศร โดยการรับค่า Left & Right หรือ ซ้ายและขวา จะอ้างอิงผ่าน Input.GetAxis(“Horizontal”) และ บน ล่าง Up & Down คือ Input.GetAxis(“Vertical”)
ในกรณีตัวอย่างคือการรับค่า Mouse ในแกน X หรือ Horizontal ดังนั้นเราต้องรับค่า GetAxis ดังนี้
Input.GetAxis("Mouse X")
เมื่อมีการเคลื่อน Mouse แล้ว Transform Rotation ของ GameObject ของตัวละครเราก็จะมีการหมุนเกิดขึ้นในคำสั่ง
transform.rotation = Quaternion.Euler(0, yRot, 0); Controller.Move(height * -gravity * Time.deltaTime);
เมื่อเขียนคำสั่งเสร้จแล้วเราต้องเอา Script ไป add Component ที่ตัวละครของเราทันที
ให้คลิกเลือก ตัวละครของเรา แล้วเลือกเมนู Component > Character Controller ให้กับตัวละคร ต่อมาไปที่ Inspector เลือก Add Component ใหม่โดยเอา JavaScript ของเราคือไฟล์ Players ไปใส่ให้มัน
ท้องฟ้าของเกมมันช่าง อึมครึม เรามาแต่งให้สวยงามเหมือนภาพข้างบนกันหน่อย โดยเพิ่ม SkyBox ลงไปในเกมของเรา ให้เราไปที่ Main Camera แล้วทำการ Add ตัว Component > Rendering > SkyBox
เพิ่ม SkyBox เลือกท้องฟ้าสวยๆ ลงไปสักหน่อย
เอาล่ะลองมา Run ตัวเกมของเรากันหน่อยดีกว่า ว่าจะเป็นยังไง เมื่อเรา Run เกมของเราแล้วลอง ขยับ Mouse ในมือของคุณเพื่อดูว่าตัวละครของเรามันหมุนไปมาหรือเปล่าดูครับ
วีดีโอเวลาเล่นจริงนะครับ จะเป็นแบบนี้
ไม่ยากอีกแล้วใช่ไหมครับ ลองทำตามกันดูนะครับ