อยากสร้างเกมเป็น ทำยังไงดี? (พื้นฐาน Unity3D ฉบับมือใหม่ #3)

มาลองสร้างโลกจำลองกันดีกว่า

อ่านเยอะแค่ไหน ก็ไม่เข้าใจเท่าลองทำเองหรอก!
เรามาลองสร้างโลกจำลองขึ้นมาหนึ่งโลกกันเลยดีกว่าครับ

File -> New Scene (Ctrl + N)

เริ่มต้นด้วยการสร้าง Scene ใหม่ขึ้นมา 1 Scene ครับ

(จริงๆเมื่อสร้างโปรเจคต์ใหม่ จะมี Scene แรกให้อยู่แล้ว แต่สร้างไว้ให้เป็นนิสัยจะดีกว่าครับ ป้องกันการเผลอไปแก้ไข Scene เก่าโดยไม่รู้ตัว)

เสร็จแล้วก็อย่าลืมเซฟไฟล์ Scene ไว้ด้วยเลยครับ

File -> Save Scenes (Ctrl + S)

ต่อมาก็ทำการสร้างโมเดลใส่เข้าไปในเกม
โดยการกด GameObject > 3D Object > Cube ครับ

(เราจะใช้สี่เหลี่ยมที่เราสร้างขึ้นมานี้ เป็นจุดศูนย์กลางของวัตถุของเราครับ ส่วนรายละเอียดต่างๆของวัตถุนั้น เราจะนำมาใส่ทับกับสี่เหลี่ยมที่เราสร้างขึ้นมาทีหลังครับ)

หน้าต่าง Inspector แสดงรายละเอียดของวัตถุที่เรากำลังเลือก

เลือกไปที่วัตถุที่เราเพิ่งสร้างขึ้นมา แล้วกำหนด Position ให้ไปอยู่ที่จุด (0,0,0)
และวัตถุนี้ผมจะใช้เป็นตัวละครที่เราจะได้บังคับครับ ตั้งชื่อให้มันว่า myCharacter (หรือจะเป็นชื่ออื่นก็ได้ครับ เอาที่ตัวเองถนัดเลย)

สร้าง C# Script ขึ้นมาใหม่

จากนั้น ไปที่หน้าต่าง Project ทำการสร้างไฟล์ C# ขึ้นมาหนึ่งไฟล์ครับ โดยตั้งชื่อว่า myCharacterController (หรือจะเป็นชื่อที่เพื่อนๆตั้งก่อนหน้านี้ก็ได้ครับ เช่น playerController, eieiController ได้หมดเลย)

จากนั้น ทำการลากไฟล์ Script ที่เพิ่งสร้างขึ้นมา ไปใส่ใน GameObject myCharacter ของเราเลยครับ (จะลากใส่ตัววัตถุในหน้าต่าง scene ก็ได้, จะลากใส่ชื่อวัตถุใน Hierarchy ก็ได้ หรือจะเลือกวัตถุ แล้วลากใส่ด้านข้างใน inspector ก็ได้ครับ)

หากทำได้ถูกต้อง เมื่อเรากดที่วัตถุ myCharacter ในหน้าต่าง inspector จะต้องมีข้อมูลของ script ขึ้นมาแบบนี้ครับ

script ที่เราลากใส่ชื่อ myCharacterController ไปโผล่ในหน้าต่าง inspector แล้ว

หากขึ้นแบบนี้ แสดงว่า script ของเรา ได้ไปอยู่ในตัว GameObject ชิ้นนั้นเรียบร้อยแล้ว ดับเบิ้ลคลิกเข้าไปใน script เพื่อเริ่มเขียนโค๊ดกันได้เลยครับ

script เปล่าที่เพิ่งถูกสร้างขึ้นมา

script เปล่าที่ถูกสร้างขึ้นมาจะมีหน้าตาเป็นแบบนี้ครับ (ผมจะพยายามไม่ใช่ศัพท์ยากๆ เพื่อที่หลายคนที่ไม่เคยเขียนโค๊ดมาก่อน จะได้ลองทำตามได้นะครับ)

โดยตัว script เนี่ย จะสามารถแบ่งได้เป็น 2 ส่วนครับ
ก็คือส่วน Start: จะรันเฉพาะครั้งแรกครั้งเดียวที่ GameObject ถูกสร้างขึ้นมา
และส่วน Update: จะรัน loop ตลอดเวลาที่ GameObject ยังอยู่ใน scene

โดยการควบคุมตัวละครพื้นฐานของเราเนี่ย จะทำในส่วนของ Update ครับ
มาเริ่มกันเลย!

การรับ Input พื้นฐานจาก Keyboard

คำสั่งแรก คือการรับค่าจากคีย์บอร์ดครับ โดยเราจะใช้โค๊ดดังรูปตัวอย่างด้านบน ซึ่งก็คือการรับค่าจากปุ่ม W ครับ จากนั้น จะให้ปุ่มนั้นทำคำสั่งอะไร ก็ค่อยไปใส่ภายในเครื่องหมายปีกกาอีกทีนึงครับ

ตัวอย่างการใช้ Input.GetKey ในรูปแบบต่างๆ

*เสริมเพิ่มเติมเล็กน้อย การรับค่าปุ่มกดใน Unity สามารถทำได้สามแบบครับ คือ
GetKey:
เป็นการรับค่าจากปุ่มเรื่อยๆ หากกดค้างครับ
GetKeyDown:
รับเฉพาะจังหวะที่กดปุ่มลง ดังนั้นการกดค้างในคำสั่งนี้ จะถือว่ากดแค่ครั้งเดียว
GetKeyUp:
เหมือนด้านบนครับ แต่จะเป็นจังหวะที่ปุ่มถูกปล่อยแทน

script การคุมตัวละครเบื้องต้น

นี่คือโค๊ดเบื้องต้นที่ผมอยากให้เพื่อนๆลองเขียนตามกันดูครับ ถ้าคุณเข้าใจหลักการรับค่าแล้ว น่าจะเดาได้ไม่ยากว่าโค๊ดนี้ทำงานอย่างไรครับ

เมื่อเขียนเสร็จแล้ว ก็ทำการ save ไฟล์ script แล้วกลับเข้าโปรแกรม Unity และทำการลองกด Run ได้เลยครับ

จะเห็นว่า เมื่อเรากดปุ่ม W A S D วัตถุของเราก็จะเคลื่อนไหวไปตามทิศทางที่เราเขียนโค๊ดเอาไว แต่มันช่างเร็วเสียเหลือเกิน เราจึงจะสร้างตัวแปรขึ้นมา 1 ตัว ไว้เป็นตัวกำหนดความเร็วในการเคลื่อนที่ของวัตถุของเราครับ โดยการกลับไปที่หน้า Editor ของ script เรา จากนั้นสร้างตัวแปรขึ้นมา 1 ตัว โดยการเขียนโค๊ดดังนี้ครับ

บรรทัดที่ 7 ทำการสร้างตัวแปร float ขึ้นมา

เราจะใช้ตัวแปร float นี้ ที่ตั้งชื่อว่า myCharacter_moveSpeed ในการควบคุมความเร็วของตัวละครของเรานะครับ

สาระเล็กน้อย: ตัวแปรที่เป็นตัวเลขในการสร้างเกม อยากให้จำไว้สองตัวครับ ก็คือ int: เป็นเลขจำนวนเต็ม และ float: เป็นเลขทศนิยม ครับ โดยหากตัวแปรของเราเป็นค่า float จะเป็นต้องใส่ f ไว้ตามหลังเสมอนะครับ

นำตัวแปร moveSpeed มาคูณกับทิศทาง

จากนั้น นำค่า float ตัวนี้ มาคูณกับทิศทางในโค๊ดควบคุมที่เราเคยเขียนไว้ดังนี้ครับ จากนั้นลองกลับไปรันโปรแกรมอีกครั้งนึงดู จะพบว่าตัวละครของเราเคลื่อนที่ช้าลง (หากยังรู้สึกว่ามันเร็วไป ปรับเป็น 0.05f ก็ได้ครับ)

ก็ถือว่าเป็นพื้นฐานหนึ่งของการเขียนโค๊ดบังคับตัวละครครับ ต่อไปลองนำโค๊ดเหล่านี้ไปเขียนดู แล้วลองไปเล่นกันดูนะครับ ว่าแต่ละคำสั่ง มีหน้าที่ทำอะไรบ้าง

ลองเพิ่มทิศทางในการบังคับดู (โปรดสังเกตุว่าเราระบุ Vector3 เป็นตัวเลขได้)
ทำอะไรได้มากกว่าการเคลื่อนที่นะ! (อย่าลืมสังเกตุตัวแปรใหม่ด้วย)

อีกอย่างที่ควรจำไว้นะครับ ทิศทางด้านหน้าของวัตถุ คือฝั่งที่แกน 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

--

--

Phuwadech Santhanapirom (Meg ☁️)
Technologies For Everyone

Indie Game Developer. Third year student at Computer Engineering, Chiang Mai University. First Generation of Computer Gifted at The Prince Royal’s College.