รู้จักกับ Unity Game Engine สำหรับการพัฒนาเกม 2 มิติ / 3 มิติ
Unity คือ Game Engine หรือเครื่องมือสำหรับการพัฒนาเกมได้ทั้งรูปแบบ 2 มิติและ 3 มิติที่มีการทำงานข้าม Platform ได้ ทั้งแบบ Desktop , Mobile , Web
ผู้ใช้สามารถสร้างเกมให้รองรับใน Platform ดังกล่าวได้โดยการพัฒนาเกมเพียงครั้งเดียว ตัว Engine ประกอบด้วย API ในการช่วยเหลือนักพัฒนาด้านการเขียน Script โปรแกรม โดยภาษาโปรแกรมที่ใช้เขียนคือ C# (ก่อนหน้าคือใช้ JavaScript , C# ได้)
ในปัจจุบัน Unity ได้ถูกนำไปใช้ในงานด้านต่างๆที่ไม่ได้เกี่ยวข้องกับการทำเกมอย่างเดียว เช่น งานด้านภาพยนตร์ , สถาปัตยกรรม , วิศวกรรม รวมไปถึงการโต้ตอบกับผู้ใช้โดยการพัฒนาในรูปแบบของงานด้าน AR และ VR เป็นต้น
การใช้งานโปรแกรม Unity สามารถใช้งานได้ฟรี ไม่เสียค่าใช้จ่าย แต่อาจจะมีบาง Feature ที่ต้องทำการชำระเงินถึงจะเข้าใช้งานได้ เช่น Package เสริมบางตัว โดยต้องทำการสมัครสมาชิกเพื่อรับใบอนุญาตฟรีสำหรับงานส่วนบุคคลหรือบริษัทขนาดเล็ก
หน้าจอของโปรแกรม (Unity Editor)
- Project Window เป็นหน้าต่างที่แสดงโฟลเดอร์และไฟล์ต่างๆที่เก็บและใช้งานในโปรเจค เช่น โมเดล , ภาพ , เสียง , Scene รวมไปถึง Script ไฟล์ จะเรียกส่วนนี้ว่า Asset หากต้องการนำไฟล์จากด้านนอกมาทำงานต้องลากมาไว้ที่ Project
- Scene View ส่วนที่ใช้จัดมุมมองในการออกแบบเกมขึ้นอยู่กับว่าจะแสดงมุมมอง 2 มิติหรือ 3 มิติ รวมไปถึงการปรับแต่งวัตถุใน Scene เช่น การหมุน ย่อ- ขยายวัตถุนักพัฒนาสามารถที่จะลาก Asset เข้าไปใน Scene View ได้ซึ่งส่วนที่ออกแบบใน Scene จะถูกแสดงในส่วนหน้าจอเกมด้วย
- Hierarchy Window ส่วนที่แสดงลำดับชั้นของวัตถุที่ปรากฎใน Scene View โดยจะบอกชื่อวัตถุที่ทำงานภายใน Scene View ว่ามีวัตถุอะไรบ้าง เช่น Main Camera , Direction Light เป็นต้น
- Inspector Window หน้าต่างอำนวยความสะดวกในการจัดการของคุณสมบัติทั้งหมดของวัตถุที่เรากำลังทำงานด้วย เช่น การกำหนดตำแหน่ง หมุนย่อ — ขยาย วัตถุ การตั้งชื่อวัตถุ การใส่ Tag หรือการเพิ่ม Component ลงไปในวัตถุ เช่น ไฟล์ Script เป็นต้น
- Toolbar แถบเครื่องมือพื้นฐานสำหรับกำหนดคุณสมบัติต่างๆที่อยู่ภายใน Scene เกม เช่น การปรับตำแหน่ง , ย่อ-ขยาย , หมุน วัตถุการควบคุมการเล่นหรือหยุดเกมและการจัดการบัญชีผู้ใช้
คำศัพท์ที่ควรรู้ก่อนใช้โปรแกรม Unity
- Asset หมายถึง สิ่งที่นำเข้ามาทำงานใน Project สำหรับพัฒนาเกม ยกตัวอย่าง เช่น Model ตัวละคร, Animation , Script , Texture , เสียงและอื่นๆ ซึ่ง Asset จะถูกเก็บไว้ใน Project มีชื่อโฟลเดอร์ว่า Assets ถ้าหากไม่ได้อยู่ในโฟลเดอร์นี้ก็ไม่สามารถพัฒนาเกมได้
- Scene หมายถึง หน้าจอแสดงผลหรือฉากการทำงานของเกมโดยภายในหนึ่งเกมสามารถแบ่งฉากออกเป็นหลายๆฉากได้ เช่น ฉากเมนู , ฉากเปิดเกม , ฉากเนื้อเรื่อง , ฉากจบเกม เป็นต้น
- Camera หมายถึง กล้องที่ใช้จับภาพต่างๆภายในเกม ภาพที่แสดงผลมีมุมมองอย่างไรขึ้นอยู่กับนักพัฒนาเกม โดยภายในเกมสามารถมีกล้องได้มากกว่า 1 ตัว ถ้าไม่มีกล้องก็จะไม่มีภาพปรากฎในเกมนั่นเอง
- Light หมายถึง วัตถุประเภทแสง ใช้ปรับความมืดความสว่างภายในเกมรวมไปถึงเงาของวัตถุ
- GameObject หมายถึง วัตถุหรือองค์ประกอบต่างๆที่อยู่ภายในเกม เช่น คน สัตว์ สิ่งของ เป็นต้น
- Component หมายถึง คุณสมบัติต่างๆที่อยู่ใน Game Object เช่น ระบบฟิสิกส์ ระบบควบคุม Animation , ระบบเสียง หรือ Script ต่างๆที่อยากให้ Game Object นั้นสามารถทำงานตามที่ต้องการ
- Transform หมายถึง Component ที่ต้องมีอยู่ในวัตถุทุกตัวเป็นสิ่งที่ขาดไม่ได้ โดยจะเป็นตัวที่เก็บค่า 3 ค่าได้แก่ Position (ตำแหน่งของวัตถุ) , Rotation(การหมุนวัตถุ) , Scale ( ขนาดของวัตถุ)
- Rigidbody / Rigidbody2D หมายถึง Component ที่จัดการด้านระบบฟิสิกส์
ในวัตถุ เช่น มวล(mass) , แรงโน้มถ่วง (Gravity) , การเคลื่อนไหวของวัตถุ (Kinemetic) , การล็อควัตถุ (Freeze)
- Sprite คือ ภาพที่ทำมาใช้งานในระบบเกม (2 มิติ)
- Particle System หมายถึง ระบบ Effect ภายในเกม เช่น Effect ระเบิด , Effect ไฟ , ฝุ่น ใช้เพิ่มสีสันภายในเกม
- Texture หมายถึง รูปภาพที่นำมาประกอบในโมเดลให้มีความสมจริงมากยิ่งขึ้น
- Material หมายถึง เม็ดสีที่ปรากฎในตัววัตถุ
- SkyBox หมายถึง Asset ที่ทำงานเกี่ยวกับท้องฟ้าในเกม
- Terrain หมายถึง ส่วนที่จัดการเกี่ยวกับสภาพแวดล้อมภายในเกม เช่น ทำภูเขา ต้นไม้ หญ้า เป็นต้น
- Wind Zone หมายถึง Game Object ที่จัดการเกี่ยวกับลม ช่วยเพิ่มความสมจริงให้กับเกม เช่น พายุ , ใบไม้ขยับตามลม เป็นต้น
- Vector2 คือ ตัวแปรที่เก็บตำแหน่งแกน X , Y ในระบบเกมแบบ 2 มิติ
- Vector3 คือ ตัวแปรที่เก็บตำแหน่งแกน X , Y , Z ในระบบเกมแบบ 3 มิติ
- Collider / Collider2D หมายถึง Component ที่ใช้ตรวจสอบการชนของวัถตุในเกม เช่น ถ้าเก็บไอเทมก็จะได้รับ HP เป็นต้น
- Ray / RayCast หมายถึง ส่วนที่ใช้ในการจัดการเกี่ยวกับการคำนวณระยะห่างของวัตถุ โดยอาศัย Ray เป็นตัวเช็คการตกกระทบกับวัตถุ แล้วจะทำให้เกิด Action อย่างไร สามารถนำมาใช้ประโยชน์ได้หลายๆอย่างรวมถึงการชนของวัตถุด้วย
- Prefab หมายถึง การสร้าง GameObject ตัวต้นแบบ โดยทำการโคลนนิ่งวัตถุที่มีคุณสมบัติต่างๆที่ต้องการ เพื่อจะนำวัตถุเหล่านั้นมาใช้งานซ้ำโดยที่ไม่ต้องสร้างหรือกำหนดคุณสมบัติหลายครั้ง
- Tag หมายถึง ป้ายกำกับที่ใช้แบ่งประเภทของวัตถุ เช่น Player , Camera , Enemy , NPC, Ground เป็นต้น (ไม่จำเป็นต้องกำหนดก็ได้)
- Layer หมายถึง ลำดับชั้นการทำงานของวัตถุ
มุมมอง Perspective & Orthographic
- Perspective หมายถึง การแสดงผลมุมมองตามสายตาของมนุษย์ ถ้าวัตถุอยู่ใกล้จะมีขนาดใหญ่ อยู่ไกลจะมีขนาดเล็กตามระยะห่างของสายตา มีรูปแบบ View 2 แบบ ได้แก่ Local (มองเห็นวัตถุที่เลือก) , Global (มองเห็นวัตถุทั้งหมด)
- Orthographic หมายถึง การแสดงผลมุมมองตามจริงของวัตถุโดยไม่ยึดกับระดับสายตามนุษย์ มุมมองนี้ไม่ว่าจะหมุนไปทางใด ขนาดของวัตถุก็จะคงที่เสมอไม่ขึ้นอยู่กับระยะใกล้ไกล เหมาะในการเปรียบเทียบขนาดวัตถุ
ฟังก์ชั่นพื้นฐาน
using UnityEngine;
using System.Collections;
public class MyScript : MonoBehaviour {
// ฟังก์ชั่นที่จะถูกเรียกใช้งานในตอนเริ่มต้น เมื่อสั่งให้ Script Enabled
void Start () {
Debug.Log("Hello world!");
}
// ฟังก์ชั่นที่จะถูกเรียกใช้งานในตอนเริ่มต้น เมื่อโหลด Component หรือ Script เข้ามาทำงาน
void Awake () {
}
}
- Start() คือ ฟังก์ชั่นที่จะถูกเรียกใช้งานในตอนเริ่มต้น โดยคำสั่งที่เขียนภายใน Start จะถูกเรียกใช้งานแค่ครั้งเดียวและทำงานเมื่อสั่งให้ Script Enabled เท่านั้น
- Awake() มีการทำงานคล้ายกับ Start คือทำงานในตอนเริ่มต้น แต่ Awake จะทำงานเมื่อโหลด Component หรือ Script เข้ามาทำงาน คือสั่ง Enabled / Disabled ก็ทำงานเหมือนเดิม
using UnityEngine;
using System.Collections;
public class MyScript : MonoBehaviour {
void Update () {
//ทำงานตลอดเวลาโดยอ้างอิงตามความเร็วของเครื่องคอมพิวเตอร์ที่ใช้รันเกม
}
void FixedUpdate () {
//มีการคำนวณระยะเวลาคงที่และ Realtime ไม่ได้จำแนกตามความเร็วเครื่องใช้
}
void LateUpdate() () {
//จะทำงานหลังฟังก์ชั่น Update อีกที ใช้ทำงานคำสั่ง เมื่อ Object อัปเดตค่าเรียบร้อยแล้ว
}
}
- Update() คือ ฟังก์ชั่นที่ใช้รันคำสั่งเป็น Frame ต่อ Frame คือ ทำงานตลอดเวลาโดยอ้างอิงตามความเร็วของเครื่องคอมพิวเตอร์ที่ใช้รันเกม
- FixedUpdate() ทำงานคล้ายๆกับ Update แต่ว่าจะมีการคำนวณระยะเวลาคงที่ (ค่าตายตัว) และ Realtime ไม่ได้จำแนกตามความเร็วเครื่องใช้ร่วมกับระบบเวลาและระบบฟิสิกส์ (FrameRate คงที่)ยกตัวอย่าง เช่น ถ้าใช้ Update นานๆจะมีการกระตุกเนื่องจากอ้างอิงตามความเร็วเครื่องส่วน FixedUpdate จะคงที่
- LateUpdate() จะทำงานหลังฟังก์ชั่น Update อีกที ใช้ทำงานคำสั่ง เมื่อ Object อัปเดตค่าเรียบร้อยแล้ว
เนื้อหาที่เกี่ยวข้อง
ช่องทางการสนับสนุน
🎮 คอร์สสร้างเกม 3D ด้วยโปรแกรม Unity
🏹 คอร์สสร้างเกม 2D ด้วยโปรแกรม Unity