รู้จักกับ Unity Game Engine สำหรับการพัฒนาเกม 2 มิติ / 3 มิติ

KongRuksiam Studio
4 min readFeb 29, 2024

--

Unity คือ Game Engine หรือเครื่องมือสำหรับการพัฒนาเกมได้ทั้งรูปแบบ 2 มิติและ 3 มิติที่มีการทำงานข้าม Platform ได้ ทั้งแบบ Desktop , Mobile , Web

https://docs.unity3d.com/Manual/2Dor3D.html

ผู้ใช้สามารถสร้างเกมให้รองรับใน Platform ดังกล่าวได้โดยการพัฒนาเกมเพียงครั้งเดียว ตัว Engine ประกอบด้วย API ในการช่วยเหลือนักพัฒนาด้านการเขียน Script โปรแกรม โดยภาษาโปรแกรมที่ใช้เขียนคือ C# (ก่อนหน้าคือใช้ JavaScript , C# ได้)

https://docs.unity3d.com/Manual/2Dor3D.html

ในปัจจุบัน Unity ได้ถูกนำไปใช้ในงานด้านต่างๆที่ไม่ได้เกี่ยวข้องกับการทำเกมอย่างเดียว เช่น งานด้านภาพยนตร์ , สถาปัตยกรรม , วิศวกรรม รวมไปถึงการโต้ตอบกับผู้ใช้โดยการพัฒนาในรูปแบบของงานด้าน AR และ VR เป็นต้น

https://docs.unity3d.com/560/Documentation/uploads/Main/AnimationIntroPic.jpg

การใช้งานโปรแกรม Unity สามารถใช้งานได้ฟรี ไม่เสียค่าใช้จ่าย แต่อาจจะมีบาง Feature ที่ต้องทำการชำระเงินถึงจะเข้าใช้งานได้ เช่น Package เสริมบางตัว โดยต้องทำการสมัครสมาชิกเพื่อรับใบอนุญาตฟรีสำหรับงานส่วนบุคคลหรือบริษัทขนาดเล็ก

หน้าจอของโปรแกรม (Unity Editor)

https://unity-connect-prd.storage.googleapis.com/20220606/learn/images/7fabb375-5282-4852-9ecf-d8acc254052b_EditorExplore.png
  • 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

https://docs.unity3d.com/510/Documentation/Manual/ProjectView.html
  • Asset หมายถึง สิ่งที่นำเข้ามาทำงานใน Project สำหรับพัฒนาเกม ยกตัวอย่าง เช่น Model ตัวละคร, Animation , Script , Texture , เสียงและอื่นๆ ซึ่ง Asset จะถูกเก็บไว้ใน Project มีชื่อโฟลเดอร์ว่า Assets ถ้าหากไม่ได้อยู่ในโฟลเดอร์นี้ก็ไม่สามารถพัฒนาเกมได้
https://learn.unity.com/tutorial/multi-scene-physics-1#5d4347a7edbc2a002195c130
  • Scene หมายถึง หน้าจอแสดงผลหรือฉากการทำงานของเกมโดยภายในหนึ่งเกมสามารถแบ่งฉากออกเป็นหลายๆฉากได้ เช่น ฉากเมนู , ฉากเปิดเกม , ฉากเนื้อเรื่อง , ฉากจบเกม เป็นต้น
https://docs.unity3d.com/Manual/PhysicalCameras.html
  • Camera หมายถึง กล้องที่ใช้จับภาพต่างๆภายในเกม ภาพที่แสดงผลมีมุมมองอย่างไรขึ้นอยู่กับนักพัฒนาเกม โดยภายในเกมสามารถมีกล้องได้มากกว่า 1 ตัว ถ้าไม่มีกล้องก็จะไม่มีภาพปรากฎในเกมนั่นเอง
https://learn.unity.com/tutorial/understanding-light-shapes-in-hdrp#5fc5bc9bedbc2a021422972a
  • Light หมายถึง วัตถุประเภทแสง ใช้ปรับความมืดความสว่างภายในเกมรวมไปถึงเงาของวัตถุ
  • GameObject หมายถึง วัตถุหรือองค์ประกอบต่างๆที่อยู่ภายในเกม เช่น คน สัตว์ สิ่งของ เป็นต้น
https://learn.unity.com/tutorial/fps-mod-customize-weapon-projectiles#5da6eea6edbc2a001f6462ab
  • Component หมายถึง คุณสมบัติต่างๆที่อยู่ใน Game Object เช่น ระบบฟิสิกส์ ระบบควบคุม Animation , ระบบเสียง หรือ Script ต่างๆที่อยากให้ Game Object นั้นสามารถทำงานตามที่ต้องการ
https://learn.unity.com/tutorial/explore-the-unity-editor-1#6273f00fedbc2a7f158cc1f2
  • Transform หมายถึง Component ที่ต้องมีอยู่ในวัตถุทุกตัวเป็นสิ่งที่ขาดไม่ได้ โดยจะเป็นตัวที่เก็บค่า 3 ค่าได้แก่ Position (ตำแหน่งของวัตถุ) , Rotation(การหมุนวัตถุ) , Scale ( ขนาดของวัตถุ)
https://learn.unity.com/tutorial/challenge-basketball-and-the-hierarchy#65bce615edbc2a31aad45eba
  • Rigidbody / Rigidbody2D หมายถึง Component ที่จัดการด้านระบบฟิสิกส์
    ในวัตถุ เช่น มวล(mass) , แรงโน้มถ่วง (Gravity) , การเคลื่อนไหวของวัตถุ (Kinemetic) , การล็อควัตถุ (Freeze)
https://learn.unity.com/tutorial/rigging-a-sprite-with-the-2d-animation-package#6017535aedbc2a69ae9b3b9f
  • Sprite คือ ภาพที่ทำมาใช้งานในระบบเกม (2 มิติ)
https://docs.unity3d.com/es/2019.4/Manual/Built-inParticleSystem.html
  • Particle System หมายถึง ระบบ Effect ภายในเกม เช่น Effect ระเบิด , Effect ไฟ , ฝุ่น ใช้เพิ่มสีสันภายในเกม
  • Texture หมายถึง รูปภาพที่นำมาประกอบในโมเดลให้มีความสมจริงมากยิ่งขึ้น
https://docs.unity3d.com/es/2019.4/Manual/class-Material.html
  • Material หมายถึง เม็ดสีที่ปรากฎในตัววัตถุ
https://assetstore.unity.com/packages/2d/textures-materials/sky/free-stylized-skybox-212257
  • SkyBox หมายถึง Asset ที่ทำงานเกี่ยวกับท้องฟ้าในเกม
https://docs.unity3d.com/2019.4/Documentation/Manual/script-Terrain.html
  • Terrain หมายถึง ส่วนที่จัดการเกี่ยวกับสภาพแวดล้อมภายในเกม เช่น ทำภูเขา ต้นไม้ หญ้า เป็นต้น
  • Wind Zone หมายถึง Game Object ที่จัดการเกี่ยวกับลม ช่วยเพิ่มความสมจริงให้กับเกม เช่น พายุ , ใบไม้ขยับตามลม เป็นต้น
  • Vector2 คือ ตัวแปรที่เก็บตำแหน่งแกน X , Y ในระบบเกมแบบ 2 มิติ
  • Vector3 คือ ตัวแปรที่เก็บตำแหน่งแกน X , Y , Z ในระบบเกมแบบ 3 มิติ
https://learn.unity.com/tutorial/applying-2d-colliders-for-physics-interactions#6000f2d0edbc2a4a292a3771
  • Collider / Collider2D หมายถึง Component ที่ใช้ตรวจสอบการชนของวัถตุในเกม เช่น ถ้าเก็บไอเทมก็จะได้รับ HP เป็นต้น
https://learn.unity.com/tutorial/let-s-try-shooting-with-raycasts#5c7f8528edbc2a002053b469
  • Ray / RayCast หมายถึง ส่วนที่ใช้ในการจัดการเกี่ยวกับการคำนวณระยะห่างของวัตถุ โดยอาศัย Ray เป็นตัวเช็คการตกกระทบกับวัตถุ แล้วจะทำให้เกิด Action อย่างไร สามารถนำมาใช้ประโยชน์ได้หลายๆอย่างรวมถึงการชนของวัตถุด้วย
https://learn.unity.com/tutorial/prefabs-e#5f49e5bcedbc2a280d7cf66f
  • Prefab หมายถึง การสร้าง GameObject ตัวต้นแบบ โดยทำการโคลนนิ่งวัตถุที่มีคุณสมบัติต่างๆที่ต้องการ เพื่อจะนำวัตถุเหล่านั้นมาใช้งานซ้ำโดยที่ไม่ต้องสร้างหรือกำหนดคุณสมบัติหลายครั้ง
https://docs.unity3d.com/Manual/class-TagManager.html
  • Tag หมายถึง ป้ายกำกับที่ใช้แบ่งประเภทของวัตถุ เช่น Player , Camera , Enemy , NPC, Ground เป็นต้น (ไม่จำเป็นต้องกำหนดก็ได้)
  • Layer หมายถึง ลำดับชั้นการทำงานของวัตถุ

มุมมอง Perspective & Orthographic

Perspective (ภาพซ้าย) | Orthographic (ภาพขวา)
  • Perspective หมายถึง การแสดงผลมุมมองตามสายตาของมนุษย์ ถ้าวัตถุอยู่ใกล้จะมีขนาดใหญ่ อยู่ไกลจะมีขนาดเล็กตามระยะห่างของสายตา มีรูปแบบ View 2 แบบ ได้แก่ Local (มองเห็นวัตถุที่เลือก) , Global (มองเห็นวัตถุทั้งหมด)
  • Orthographic หมายถึง การแสดงผลมุมมองตามจริงของวัตถุโดยไม่ยึดกับระดับสายตามนุษย์ มุมมองนี้ไม่ว่าจะหมุนไปทางใด ขนาดของวัตถุก็จะคงที่เสมอไม่ขึ้นอยู่กับระยะใกล้ไกล เหมาะในการเปรียบเทียบขนาดวัตถุ
https://docs.unity3d.com/Manual/ScriptingSection.html

ฟังก์ชั่นพื้นฐาน

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

🌎 ติดตามข่าวสารเพิ่มเติมได้ที่
Facebook | YouTube | TikTok

--

--

KongRuksiam Studio

🚀 เรียนรู้การเขียนโปรแกรมนอกห้องเรียน