![](https://www.daydev.com/wp-content/uploads/2014/11/screen122.jpg)
บทเรียนต่อเนื่องสำหรับควบคุมมุมกล้องของ ตัวละครด้วย 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 ครับ
![สร้าง Terrain และวางกล้องดีๆ](https://www.daydev.com/wp-content/uploads/2014/11/screen15.jpg)
![คลิกที่ตัว Player ของเราครับ](https://www.daydev.com/wp-content/uploads/2014/11/screen24.jpg)
จัดแสงส่วนของ Direction Light ให้เรียบร้อยสวยงาม จะวาง Plot Light ก็ได้นะครับ
![จัดแสงดีๆ](https://www.daydev.com/wp-content/uploads/2014/11/screen34.jpg)
ไปที่แถบเมนู Project กดปุ่ม Create สร้าง folder ขึ้นมาว่า Scripts และสร้างไฟล์ Javascript ใหม่ขึ้นมาวางไว้ในนั้นครับ ตั้งชื่อว่า Players.js
![สร้าง folder ใหม่ชื่อ scripts](https://www.daydev.com/wp-content/uploads/2014/11/screen44.jpg)
![สร้างไฟล์ Javascript ใหม่เช่นกันชื่อ Players](https://www.daydev.com/wp-content/uploads/2014/11/screen54.jpg)
เปิด 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 control ลงไป](https://www.daydev.com/wp-content/uploads/2014/11/screen64.jpg)
ให้คลิกเลือก ตัวละครของเรา แล้วเลือกเมนู Component > Character Controller ให้กับตัวละคร ต่อมาไปที่ Inspector เลือก Add Component ใหม่โดยเอา JavaScript ของเราคือไฟล์ Players ไปใส่ให้มัน
![Add Script ลงไปเป็น component ใหม่](https://www.daydev.com/wp-content/uploads/2014/11/screen74.jpg)
![เป็นอันเรียบร้อย](https://www.daydev.com/wp-content/uploads/2014/11/screen103.jpg)
ท้องฟ้าของเกมมันช่าง อึมครึม เรามาแต่งให้สวยงามเหมือนภาพข้างบนกันหน่อย โดยเพิ่ม SkyBox ลงไปในเกมของเรา ให้เราไปที่ Main Camera แล้วทำการ Add ตัว Component > Rendering > SkyBox
![เลือก Main Camera](https://www.daydev.com/wp-content/uploads/2014/11/screen84.jpg)
เพิ่ม SkyBox เลือกท้องฟ้าสวยๆ ลงไปสักหน่อย
![เพิ่ม skyBox](https://www.daydev.com/wp-content/uploads/2014/11/screen94.jpg)
เอาล่ะลองมา Run ตัวเกมของเรากันหน่อยดีกว่า ว่าจะเป็นยังไง เมื่อเรา Run เกมของเราแล้วลอง ขยับ Mouse ในมือของคุณเพื่อดูว่าตัวละครของเรามันหมุนไปมาหรือเปล่าดูครับ
![Mouse ในมือมันสั่น](https://www.daydev.com/wp-content/uploads/2014/11/screen112.jpg)
วีดีโอเวลาเล่นจริงนะครับ จะเป็นแบบนี้
ไม่ยากอีกแล้วใช่ไหมครับ ลองทำตามกันดูนะครับ