อยากสร้างเกมเป็น ทำยังไงดี? (พื้นฐาน Unity3D ฉบับมือใหม่ #3)
มาลองสร้างโลกจำลองกันดีกว่า
อ่านเยอะแค่ไหน ก็ไม่เข้าใจเท่าลองทำเองหรอก!
เรามาลองสร้างโลกจำลองขึ้นมาหนึ่งโลกกันเลยดีกว่าครับ
เริ่มต้นด้วยการสร้าง Scene ใหม่ขึ้นมา 1 Scene ครับ
(จริงๆเมื่อสร้างโปรเจคต์ใหม่ จะมี Scene แรกให้อยู่แล้ว แต่สร้างไว้ให้เป็นนิสัยจะดีกว่าครับ ป้องกันการเผลอไปแก้ไข Scene เก่าโดยไม่รู้ตัว)
เสร็จแล้วก็อย่าลืมเซฟไฟล์ Scene ไว้ด้วยเลยครับ
ต่อมาก็ทำการสร้างโมเดลใส่เข้าไปในเกม
โดยการกด GameObject > 3D Object > Cube ครับ
(เราจะใช้สี่เหลี่ยมที่เราสร้างขึ้นมานี้ เป็นจุดศูนย์กลางของวัตถุของเราครับ ส่วนรายละเอียดต่างๆของวัตถุนั้น เราจะนำมาใส่ทับกับสี่เหลี่ยมที่เราสร้างขึ้นมาทีหลังครับ)
เลือกไปที่วัตถุที่เราเพิ่งสร้างขึ้นมา แล้วกำหนด Position ให้ไปอยู่ที่จุด (0,0,0)
และวัตถุนี้ผมจะใช้เป็นตัวละครที่เราจะได้บังคับครับ ตั้งชื่อให้มันว่า myCharacter (หรือจะเป็นชื่ออื่นก็ได้ครับ เอาที่ตัวเองถนัดเลย)
จากนั้น ไปที่หน้าต่าง Project ทำการสร้างไฟล์ C# ขึ้นมาหนึ่งไฟล์ครับ โดยตั้งชื่อว่า myCharacterController (หรือจะเป็นชื่อที่เพื่อนๆตั้งก่อนหน้านี้ก็ได้ครับ เช่น playerController, eieiController ได้หมดเลย)
จากนั้น ทำการลากไฟล์ Script ที่เพิ่งสร้างขึ้นมา ไปใส่ใน GameObject myCharacter ของเราเลยครับ (จะลากใส่ตัววัตถุในหน้าต่าง scene ก็ได้, จะลากใส่ชื่อวัตถุใน Hierarchy ก็ได้ หรือจะเลือกวัตถุ แล้วลากใส่ด้านข้างใน inspector ก็ได้ครับ)
หากทำได้ถูกต้อง เมื่อเรากดที่วัตถุ myCharacter ในหน้าต่าง inspector จะต้องมีข้อมูลของ script ขึ้นมาแบบนี้ครับ
หากขึ้นแบบนี้ แสดงว่า script ของเรา ได้ไปอยู่ในตัว GameObject ชิ้นนั้นเรียบร้อยแล้ว ดับเบิ้ลคลิกเข้าไปใน script เพื่อเริ่มเขียนโค๊ดกันได้เลยครับ
script เปล่าที่ถูกสร้างขึ้นมาจะมีหน้าตาเป็นแบบนี้ครับ (ผมจะพยายามไม่ใช่ศัพท์ยากๆ เพื่อที่หลายคนที่ไม่เคยเขียนโค๊ดมาก่อน จะได้ลองทำตามได้นะครับ)
โดยตัว script เนี่ย จะสามารถแบ่งได้เป็น 2 ส่วนครับ
ก็คือส่วน Start: จะรันเฉพาะครั้งแรกครั้งเดียวที่ GameObject ถูกสร้างขึ้นมา
และส่วน Update: จะรัน loop ตลอดเวลาที่ GameObject ยังอยู่ใน scene
โดยการควบคุมตัวละครพื้นฐานของเราเนี่ย จะทำในส่วนของ Update ครับ
มาเริ่มกันเลย!
คำสั่งแรก คือการรับค่าจากคีย์บอร์ดครับ โดยเราจะใช้โค๊ดดังรูปตัวอย่างด้านบน ซึ่งก็คือการรับค่าจากปุ่ม W ครับ จากนั้น จะให้ปุ่มนั้นทำคำสั่งอะไร ก็ค่อยไปใส่ภายในเครื่องหมายปีกกาอีกทีนึงครับ
*เสริมเพิ่มเติมเล็กน้อย การรับค่าปุ่มกดใน Unity สามารถทำได้สามแบบครับ คือ
GetKey:
เป็นการรับค่าจากปุ่มเรื่อยๆ หากกดค้างครับ
GetKeyDown:
รับเฉพาะจังหวะที่กดปุ่มลง ดังนั้นการกดค้างในคำสั่งนี้ จะถือว่ากดแค่ครั้งเดียว
GetKeyUp:
เหมือนด้านบนครับ แต่จะเป็นจังหวะที่ปุ่มถูกปล่อยแทน
นี่คือโค๊ดเบื้องต้นที่ผมอยากให้เพื่อนๆลองเขียนตามกันดูครับ ถ้าคุณเข้าใจหลักการรับค่าแล้ว น่าจะเดาได้ไม่ยากว่าโค๊ดนี้ทำงานอย่างไรครับ
เมื่อเขียนเสร็จแล้ว ก็ทำการ save ไฟล์ script แล้วกลับเข้าโปรแกรม Unity และทำการลองกด Run ได้เลยครับ
จะเห็นว่า เมื่อเรากดปุ่ม W A S D วัตถุของเราก็จะเคลื่อนไหวไปตามทิศทางที่เราเขียนโค๊ดเอาไว แต่มันช่างเร็วเสียเหลือเกิน เราจึงจะสร้างตัวแปรขึ้นมา 1 ตัว ไว้เป็นตัวกำหนดความเร็วในการเคลื่อนที่ของวัตถุของเราครับ โดยการกลับไปที่หน้า Editor ของ script เรา จากนั้นสร้างตัวแปรขึ้นมา 1 ตัว โดยการเขียนโค๊ดดังนี้ครับ
เราจะใช้ตัวแปร float นี้ ที่ตั้งชื่อว่า myCharacter_moveSpeed ในการควบคุมความเร็วของตัวละครของเรานะครับ
สาระเล็กน้อย: ตัวแปรที่เป็นตัวเลขในการสร้างเกม อยากให้จำไว้สองตัวครับ ก็คือ int: เป็นเลขจำนวนเต็ม และ float: เป็นเลขทศนิยม ครับ โดยหากตัวแปรของเราเป็นค่า float จะเป็นต้องใส่ f ไว้ตามหลังเสมอนะครับ
จากนั้น นำค่า float ตัวนี้ มาคูณกับทิศทางในโค๊ดควบคุมที่เราเคยเขียนไว้ดังนี้ครับ จากนั้นลองกลับไปรันโปรแกรมอีกครั้งนึงดู จะพบว่าตัวละครของเราเคลื่อนที่ช้าลง (หากยังรู้สึกว่ามันเร็วไป ปรับเป็น 0.05f ก็ได้ครับ)
ก็ถือว่าเป็นพื้นฐานหนึ่งของการเขียนโค๊ดบังคับตัวละครครับ ต่อไปลองนำโค๊ดเหล่านี้ไปเขียนดู แล้วลองไปเล่นกันดูนะครับ ว่าแต่ละคำสั่ง มีหน้าที่ทำอะไรบ้าง
อีกอย่างที่ควรจำไว้นะครับ ทิศทางด้านหน้าของวัตถุ คือฝั่งที่แกน x เป็นบวกเสมอ
ตัวอย่างที่ผมยกมาให้ลองนั้น เป็นแค่ส่วนน้อยครับ ยังมีอีกหลายอย่างให้เล่นได้อีกเยอะ เพื่อนๆสามารถลองเข้าไปดูในเว็บไซต์ของ Unity ได้ครับ ตาม Link นี้เลย >> Unity Scripting API: Transform
ก็สำหรับบทความตอนที่ 3 นี้ ผมขอจบที่ตรงนี้นะครับ
- เราได้เรียนรู้การสร้าง GameObject ใส่เข้าไปใน scene
- รู้วิธีการสร้าง script แล้วนำไปยัดใส่ใน GameObject
- รู้การเขียนโค๊ดบังคับวัตถุแบบง่ายๆ
แล้วใน ตอนที่ 4 เราจะมาลองทำ mini-game ง่ายๆกันขึ้นมาเกมนึงครับ ใครที่ชอบหรือพอใจกับบทความนี้ ก็สามารถนำไปแชร์ต่อให้เพื่อนๆได้ครับ ขอบคุณที่เข้ามาอ่านครับผม ^^
หากมีเวลามากพอ ผมอาจจะเขียนบทความเกี่ยวกับเทคโนโลยี Virtual Reality ด้วยนะครับ ยังไงก็อวยพรให้ผมปั่นโปรเจคต์ทันส่งก่อนสอบไฟนอลด้วยคร้าบ T^T
เกริ่นนำ Virtual Reality คืออะไร โดย supitcha chaichan
เบื้องต้น ทดสอบ VR บน Unity โดย Woratham Kh