บทที่ 2: การสร้างระบบตัวละคร ด้วยการเขียนโค้ด C#

การสร้าง ระบบตัวละคร (Character System) ในเกมเป็นหนึ่งในองค์ประกอบหลักที่ทำให้ผู้เล่นสามารถโต้ตอบกับเกมได้อย่างเต็มที่ ไม่ว่าจะเป็นการเดิน วิ่ง กระโดด หรือการโต้ตอบกับวัตถุและสิ่งแวดล้อม ใน Unity การควบคุมตัวละครสามารถทำได้โดยการเขียนโค้ด C# เพื่อควบคุมพฤติกรรมและการเคลื่อนไหวของตัวละคร


การสร้างตัวละครใน Unity

ก่อนที่จะเขียนโค้ดควบคุมตัวละคร เราต้องสร้างตัวละครในฉากเกม (Scene) ก่อน โดยสามารถใช้วัตถุ 2D หรือ 3D ขึ้นอยู่กับประเภทของเกมที่เรากำลังพัฒนา

  1. สร้างวัตถุตัวละครใน Unity โดยไปที่ Hierarchy คลิกขวา > 3D Object (หรือ 2D Object สำหรับเกม 2D) > Cube (หรือ Sprite ในเกม 2D) เพื่อสร้างตัวละครพื้นฐาน
  2. ตั้งชื่อวัตถุให้ชัดเจน เช่น Player
  3. เพิ่ม Rigidbody ให้กับตัวละครเพื่อให้สามารถโต้ตอบกับระบบฟิสิกส์ เช่น การตกลงพื้น การกระโดด โดยไปที่ Inspector > Add Component > ค้นหา Rigidbody

การเคลื่อนไหวของตัวละคร

การควบคุมการเคลื่อนไหวของตัวละครต้องอาศัยการเขียนโค้ด C# โดยสามารถใช้ฟังก์ชัน Update() เพื่อตรวจสอบการกดปุ่มจากผู้เล่น และใช้ฟังก์ชัน Translate() หรือ Rigidbody ในการเคลื่อนย้ายตัวละคร

ตัวอย่างโค้ดการเคลื่อนไหวของตัวละคร


using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 7f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent(); // เข้าถึง Rigidbody ของตัวละคร
    }

    void Update()
    {
        // การเคลื่อนที่ซ้าย-ขวา
        float moveX = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
        transform.Translate(moveX, 0, 0);

        // การกระโดด
        if (Input.GetKeyDown(KeyCode.Space) && Mathf.Abs(rb.velocity.y) < 0.001f)
        {
            rb.AddForce(new Vector3(0, jumpForce, 0), ForceMode.Impulse);
        }
    }
}

คำอธิบายโค้ด:

  • ตัวแปร moveSpeed ถูกใช้เพื่อกำหนดความเร็วในการเคลื่อนที่ของตัวละคร
  • ฟังก์ชัน Input.GetAxis("Horizontal") จะตรวจสอบการกดปุ่มลูกศรซ้าย-ขวาหรือปุ่ม A และ D บนคีย์บอร์ดเพื่อควบคุมทิศทางการเคลื่อนที่ของตัวละคร
  • การกระโดดจะตรวจสอบปุ่ม Space หากกดปุ่มนี้และตัวละครอยู่บนพื้น ระบบจะเพิ่มแรงกระโดดให้กับตัวละครด้วย AddForce() ผ่าน Rigidbody

การปรับแต่งการเคลื่อนไหวในเกม 2D

หากเราพัฒนาเกมในรูปแบบ 2D การเคลื่อนไหวของตัวละครจะทำได้ง่ายขึ้น โดยใช้ฟังก์ชัน Translate() เพื่อเคลื่อนที่ในแนวแกน X และ Y

ตัวอย่างโค้ดการเคลื่อนไหวในเกม 2D


using UnityEngine;

public class PlayerMovement2D : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 7f;
    private Rigidbody2D rb;

    void Start()
    {
        rb = GetComponent(); // เข้าถึง Rigidbody2D ของตัวละคร
    }

    void Update()
    {
        // การเคลื่อนไหวในแกน X
        float moveX = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
        transform.Translate(moveX, 0, 0);

        // การกระโดด
        if (Input.GetKeyDown(KeyCode.Space) && Mathf.Abs(rb.velocity.y) < 0.001f)
        {
            rb.AddForce(new Vector2(0, jumpForce), ForceMode2D.Impulse);
        }
    }
}

ในกรณีนี้ เราใช้ Rigidbody2D แทน Rigidbody สำหรับการเคลื่อนไหวในเกม 2D และการกระโดดยังคงใช้หลักการเดียวกันกับเกม 3D


การจัดการการโต้ตอบของตัวละครกับวัตถุอื่น ๆ

ในเกม ตัวละครมักต้องโต้ตอบกับวัตถุอื่น ๆ เช่น การเก็บไอเท็ม หรือการชนกับศัตรู การจัดการเหตุการณ์เหล่านี้สามารถทำได้โดยใช้ Collider เพื่อรับรู้ว่าตัวละครสัมผัสกับวัตถุอื่นหรือไม่

การตรวจจับการชน (Collision Detection)

Unity มีระบบ OnCollisionEnter ที่จะถูกเรียกเมื่อวัตถุที่มี Collider ชนกับวัตถุอื่น

ตัวอย่างโค้ดการตรวจจับการชน


using UnityEngine;

public class PlayerCollision : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "Enemy")
        {
            Debug.Log("ผู้เล่นชนกับศัตรู!");
            // โค้ดเพื่อลดพลังชีวิตหรือสิ้นสุดเกม
        }
    }
}

การตรวจจับการชนแบบ Trigger หากเราต้องการให้ตัวละครสามารถเดินผ่านวัตถุได้ แต่ยังคงตรวจจับการสัมผัสได้ เราสามารถใช้ Trigger แทนการชนจริงได้

ตัวอย่างโค้ดการตรวจจับ Trigger


using UnityEngine;

public class PlayerTrigger : MonoBehaviour
{
    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Item")
        {
            Debug.Log("ผู้เล่นเก็บไอเท็มได้!");
            Destroy(other.gameObject); // ทำลายไอเท็มเมื่อเก็บได้
        }
    }
}

ในโค้ดนี้ เราใช้ OnTriggerEnter เพื่อให้ตัวละครเก็บไอเท็มเมื่อสัมผัสไอเท็ม โดยไอเท็มจะถูกทำลายหลังจากที่เก็บได้


บทที่ 2 นี้จะช่วยให้นักเรียนเข้าใจวิธีการสร้างระบบตัวละครในเกม ไม่ว่าจะเป็นการเคลื่อนไหว การกระโดด หรือการโต้ตอบกับวัตถุอื่น ๆ โดยใช้การเขียนโค้ด C# ใน Unity

Free Joomla templates by Ltheme