DeveloperFeaturedGame DevelopmentGame DevelopmentUnity 3D

การควบคุมมุมกล้องของเกมด้วย Mouse Movement บน Unity3D

บทเรียนต่อเนื่องสำหรับควบคุมมุมกล้องของ ตัวละครด้วย Mouse Movement และการออกแบบ Skyboxe ให้สวยงามสำหรับเกม 3 มิติบน Unity 3D อย่างง่ายบน Terrain ที่ออกแบบมา

บทเรียนก่อนหน้านี้

เราจะหยิบบทเรียนบทก่อนที่สร้างขึ้นมาพัฒนาต่อในส่วนของ Skybox, Camera View, Mouse Move ครับ

สร้าง Terrain และวางกล้องดีๆ
สร้าง Terrain และวางกล้องดีๆ
คลิกที่ตัว Player ของเราครับ
คลิกที่ตัว Player ของเราครับ

จัดแสงส่วนของ Direction Light ให้เรียบร้อยสวยงาม จะวาง Plot Light ก็ได้นะครับ

จัดแสงดีๆ
จัดแสงดีๆ

ไปที่แถบเมนู Project กดปุ่ม Create สร้าง folder ขึ้นมาว่า Scripts และสร้างไฟล์ Javascript ใหม่ขึ้นมาวางไว้ในนั้นครับ ตั้งชื่อว่า Players.js

สร้าง folder ใหม่ชื่อ scripts
สร้าง folder ใหม่ชื่อ scripts
สร้างไฟล์ Javascript ใหม่เช่นกันชื่อ Players
สร้างไฟล์ Javascript ใหม่เช่นกันชื่อ Players

เปิด 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 ลงไป
คลิกที่ตัวละครก่อนเลือก component > character control ลงไป

ให้คลิกเลือก ตัวละครของเรา แล้วเลือกเมนู Component > Character Controller ให้กับตัวละคร ต่อมาไปที่ Inspector เลือก Add Component ใหม่โดยเอา JavaScript ของเราคือไฟล์ Players ไปใส่ให้มัน

Add Script ลงไปเป็น component ใหม่
Add Script ลงไปเป็น component ใหม่
เป็นอันเรียบร้อย
เป็นอันเรียบร้อย

ท้องฟ้าของเกมมันช่าง อึมครึม เรามาแต่งให้สวยงามเหมือนภาพข้างบนกันหน่อย โดยเพิ่ม SkyBox ลงไปในเกมของเรา ให้เราไปที่ Main Camera แล้วทำการ Add ตัว Component > Rendering > SkyBox

เลือก Main Camera
เลือก Main Camera

เพิ่ม SkyBox เลือกท้องฟ้าสวยๆ ลงไปสักหน่อย

เพิ่ม skyBox
เพิ่ม SkyBox

เอาล่ะลองมา Run ตัวเกมของเรากันหน่อยดีกว่า ว่าจะเป็นยังไง เมื่อเรา Run เกมของเราแล้วลอง ขยับ Mouse ในมือของคุณเพื่อดูว่าตัวละครของเรามันหมุนไปมาหรือเปล่าดูครับ

Mouse ในมือมันสั่น
Mouse ในมือมันสั่น

วีดีโอเวลาเล่นจริงนะครับ จะเป็นแบบนี้

ไม่ยากอีกแล้วใช่ไหมครับ ลองทำตามกันดูนะครับ

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน