บทที่ 4: การชนและการทำงานของ Trigger ใน 3D

ระบบการชน (Collision System) และการตรวจจับการกระทำผ่าน Trigger เป็นหนึ่งในองค์ประกอบหลักของการพัฒนาเกมใน Unity โดยเฉพาะในเกม 3D ซึ่งมีมิติในการเคลื่อนไหวและโต้ตอบที่ซับซ้อนมากขึ้น ในบทนี้เราจะเรียนรู้วิธีการจัดการการชนระหว่างวัตถุในเกม และวิธีการใช้ Trigger เพื่อสร้างเหตุการณ์ที่เกิดขึ้นเมื่อผู้เล่นสัมผัสกับวัตถุโดยไม่เกิดการชนที่ทำให้ตัวละครหยุด


การจัดการการชน (Collision System) ใน 3D

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

ขั้นตอนการใช้ Collider ใน Unity

  1. ไปที่วัตถุที่ต้องการตรวจจับการชน เช่น ตัวละครหลัก หรือวัตถุอื่นในเกม
  2. เพิ่ม Collider ให้กับวัตถุ โดยไปที่ Inspector คลิกที่ Add Component และพิมพ์ค้นหา Collider เช่น Box Collider, Sphere Collider หรือ Mesh Collider ขึ้นอยู่กับรูปร่างของวัตถุ
  3. ตรวจสอบให้แน่ใจว่าวัตถุที่เคลื่อนที่มี Rigidbody เพิ่มเข้ามาเพื่อให้การชนทำงานร่วมกับระบบฟิสิกส์

การเขียนโค้ดเพื่อตรวจจับการชน

ใน Unity เราสามารถใช้ฟังก์ชัน OnCollisionEnter เพื่อตรวจจับการชนของวัตถุ เมื่อมีการชนเกิดขึ้น โค้ดที่อยู่ในฟังก์ชันนี้จะถูกเรียกใช้งาน

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


using UnityEngine;

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

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

  • ฟังก์ชัน OnCollisionEnter(Collision collision) จะถูกเรียกเมื่อวัตถุที่มี Collider ชนกับวัตถุอื่น
  • collision.gameObject.tag จะตรวจสอบว่า วัตถุที่ชนกันมีแท็ก (Tag) เป็น "Enemy" หรือไม่ หากใช่ ก็สามารถดำเนินการที่ต้องการ เช่น ลดพลังชีวิตหรือแสดงข้อความ

การใช้ Trigger เพื่อสร้างเหตุการณ์

Trigger คือคอมโพเนนต์ที่ใช้ตรวจจับการสัมผัสระหว่างวัตถุโดยไม่ทำให้เกิดการชนจริง กล่าวคือ วัตถุสามารถเดินผ่านกันได้แต่สามารถสร้างเหตุการณ์เมื่อเกิดการสัมผัส เช่น ผู้เล่นเดินผ่านประตูเพื่อเปิดประตู หรือเดินเข้าสู่พื้นที่หนึ่งเพื่อเริ่มต้นภารกิจใหม่

ขั้นตอนการใช้ Trigger ใน Unity

  1. เพิ่ม Collider ให้กับวัตถุที่ต้องการใช้เป็น Trigger เช่น ประตูหรือพื้นที่ตรวจจับ
  2. ใน Inspector ของ Collider ทำเครื่องหมายที่ตัวเลือก Is Trigger
  3. เขียนโค้ดเพื่อตรวจจับเมื่อมีการสัมผัสเกิดขึ้นโดยใช้ฟังก์ชัน OnTriggerEnter

ตัวอย่างโค้ดการใช้ Trigger


using UnityEngine;

public class DoorTrigger : MonoBehaviour
{
    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player")
        {
            Debug.Log("ผู้เล่นเดินเข้าสู่พื้นที่ตรวจจับ!");
            // ใส่โค้ดเพื่อเปิดประตูหรือเริ่มภารกิจใหม่
        }
    }
}

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

  • ฟังก์ชัน OnTriggerEnter จะถูกเรียกเมื่อวัตถุที่มี Is Trigger ถูกสัมผัสโดยวัตถุอื่น
  • ในโค้ดนี้ ตรวจสอบว่าวัตถุที่เข้าสู่ Trigger เป็นผู้เล่น (Player) หรือไม่ และสามารถสร้างเหตุการณ์ต่าง ๆ เช่น เปิดประตูหรือเริ่มต้นภารกิจ

การจัดการระบบฟิสิกส์ในการชน

ในเกม 3D ระบบการชนและ Trigger ทำงานควบคู่กับระบบฟิสิกส์ (Physics System) ของ Unity วัตถุที่มี Rigidbody จะถูกควบคุมโดยระบบฟิสิกส์ ทำให้การเคลื่อนไหวและการชนดูสมจริงมากขึ้น การตั้งค่าระบบฟิสิกส์ที่เหมาะสมจะช่วยให้เกมทำงานได้ลื่นไหลและเสถียร

การตั้งค่าการชนของ Rigidbody

  • Mass (มวล): ใช้กำหนดน้ำหนักของวัตถุ ยิ่งมีมวลมาก การเคลื่อนที่หรือการชนจะส่งผลมากขึ้น
  • Drag (แรงต้าน): ใช้กำหนดแรงต้านการเคลื่อนไหวของวัตถุ เช่น หากต้องการให้วัตถุเคลื่อนไหวช้าลงสามารถเพิ่มค่า Drag ได้
  • Use Gravity (การใช้แรงโน้มถ่วง): ใช้กำหนดว่าต้องการให้วัตถุถูกแรงโน้มถ่วงดึงลงหรือไม่ หากไม่ต้องการให้วัตถุตกลงพื้นเมื่อวางไว้ ให้ปิดการใช้งาน

การใช้ Physics Material ในการจัดการการชน การใช้ Physics Material ช่วยให้เราควบคุมพฤติกรรมของการชนได้ เช่น การเด้งกลับเมื่อวัตถุชนกัน หรือการลดแรงเสียดทานเมื่อวัตถุเคลื่อนที่

ขั้นตอนการใช้ Physics Material

  1. ไปที่ Assets > คลิกขวา > Create > Physics Material เพื่อสร้าง Physics Material ใหม่
  2. ตั้งค่าคุณสมบัติของ Material เช่น:
    • Bounciness: ใช้กำหนดการเด้งกลับเมื่อวัตถุชนกัน ยิ่งค่านี้สูง วัตถุจะเด้งมากขึ้น
    • Friction: ใช้กำหนดแรงเสียดทานระหว่างวัตถุเมื่อเคลื่อนที่
  3. ลาก Physics Material ที่สร้างไว้ไปวางใน Collider ของวัตถุที่ต้องการ

การรวมระบบการชนและ Trigger เพื่อสร้างเกมที่มีปฏิสัมพันธ์

การรวมระบบการชนและ Trigger ช่วยให้เราสามารถสร้างสถานการณ์ต่าง ๆ ในเกมได้ เช่น เมื่อผู้เล่นเดินเข้าสู่พื้นที่ใดพื้นที่หนึ่ง จะเริ่มต้นการโจมตีจากศัตรู หรือเมื่อผู้เล่นเดินผ่านประตู ประตูก็จะเปิด

ตัวอย่างการรวมระบบการชนและ Trigger

  1. การสร้างศัตรูที่โจมตีเมื่อผู้เล่นเดินเข้าใกล้: เราสามารถใช้ Trigger เพื่อเริ่มต้นการโจมตีเมื่อผู้เล่นเข้าสู่พื้นที่
  2. การเก็บไอเท็มเมื่อผู้เล่นชนกับไอเท็ม: เราสามารถใช้ระบบการชนเพื่อตรวจจับว่าผู้เล่นเก็บไอเท็ม และทำลายไอเท็มเมื่อถูกเก็บ

ตัวอย่างโค้ดการรวมระบบการชนและ Trigger


using UnityEngine;

public class PlayerInteraction : MonoBehaviour
{
    public GameObject door;
    public ScoreManager scoreManager;

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Item")
        {
            scoreManager.AddScore(10); // เพิ่มคะแนนเมื่อเก็บไอเท็ม
            Destroy(other.gameObject); // ทำลายไอเท็ม
        }

        if (other.gameObject.tag == "Door")
        {
            door.GetComponent().SetTrigger("Open"); // เปิดประตูเมื่อเดินเข้าใกล้
        }
    }
}

ในโค้ดนี้ ผู้เล่นจะสามารถเก็บไอเท็มและเปิดประตูเมื่อเดินเข้าใกล้ โดยใช้ระบบ Trigger และการตรวจจับการชน


บทที่ 4 นี้ช่วยให้นักเรียนได้เรียนรู้การจัดการระบบการชนในเกม 3D รวมถึงการใช้ Trigger เพื่อสร้างเหตุการณ์และปฏิสัมพันธ์ที่หลากหลายระหว่างผู้เล่นและวัตถุในเกม


Free Joomla templates by Ltheme