บทที่ 6: การโต้ตอบของผู้เล่นกับเกม

ในเกม การโต้ตอบของผู้เล่นกับวัตถุหรือสิ่งต่าง ๆ ในเกมเป็นส่วนสำคัญที่ทำให้เกมน่าสนใจยิ่งขึ้น Unity มีเครื่องมือที่ช่วยให้การโต้ตอบเหล่านี้สามารถทำได้ง่ายและยืดหยุ่น เช่น การตรวจจับการชนกันของวัตถุ (Collisions) และการสร้างเหตุการณ์ต่าง ๆ เมื่อมีการกระทำจากผู้เล่น (Events) ในบทนี้เราจะเรียนรู้วิธีการสร้างการโต้ตอบเบื้องต้นในเกม


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

การตรวจจับการชนกันเป็นพื้นฐานสำคัญในการพัฒนาเกม ตัวอย่างเช่น การชนกันระหว่างตัวละครกับกำแพง หรือการเก็บไอเท็มเมื่อเดินผ่าน Unity ใช้ Collider และ Rigidbody ในการตรวจจับการชนกันของวัตถุต่าง ๆ

  1. ไปที่วัตถุที่ต้องการตรวจจับการชนใน Hierarchy เช่น ตัวละครหลัก หรือไอเท็ม
  2. เพิ่ม Collider ให้กับวัตถุโดยไปที่ Inspector > Add Component > พิมพ์ค้นหา Collider ที่ต้องการ เช่น Box Collider สำหรับวัตถุ 3D หรือ Circle Collider 2D สำหรับวัตถุ 2D
  3. หากวัตถุมีการเคลื่อนที่ ให้เพิ่ม Rigidbody เพื่อทำให้ Unity สามารถคำนวณการชนกันได้อย่างสมจริง

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

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


using UnityEngine;

public class PlayerCollision : MonoBehaviour
{
    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Item")
        {
            Debug.Log("Player picked up an item!");
            Destroy(collision.gameObject); // ทำลายไอเท็มเมื่อเก็บ
        }
    }
}

ในโค้ดนี้ ฟังก์ชัน OnCollisionEnter2D จะถูกเรียกทุกครั้งที่มีการชนกับวัตถุอื่น ในตัวอย่างนี้หากวัตถุที่ชนมีแท็กเป็น "Item" วัตถุนั้นจะถูกทำลาย และเราจะแสดงข้อความใน Console ว่าผู้เล่นเก็บไอเท็มแล้ว


การสร้างการชนแบบ Trigger

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

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

using UnityEngine;

public class PlayerTrigger : MonoBehaviour
{
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag == "Door")
        {
            Debug.Log("Player has entered the door area!");
            // ทำการเปิดประตูหรือเหตุการณ์อื่น ๆ
        }
    }
}

ในตัวอย่างนี้ เมื่อผู้เล่นเดินผ่านวัตถุที่มีแท็ก "Door" ระบบจะตรวจจับการชนผ่าน Trigger และสามารถทำให้เกิดเหตุการณ์ต่าง ๆ เช่น เปิดประตูหรือเปลี่ยนฉาก

การสร้างการโต้ตอบด้วยปุ่มกด

นอกจากการชนกันแล้ว เราสามารถสร้างการโต้ตอบในเกมได้ด้วยการกดปุ่มต่าง ๆ บนคีย์บอร์ดหรือจอยสติ๊ก ตัวอย่างเช่น เมื่อกดปุ่ม Space ให้ตัวละครกระโดด หรือเมื่อกดปุ่ม E ให้เปิดประตู โค้ดสำหรับการตรวจสอบการกดปุ่มสามารถเขียนได้ดังนี้:


using UnityEngine;

public class PlayerInput : MonoBehaviour
{
    public float jumpForce = 5f;
    public Rigidbody2D rb;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.AddForce(new Vector2(0, jumpForce), ForceMode2D.Impulse);
            Debug.Log("Player jumped!");
        }
    }
}

ในตัวอย่างนี้ เมื่อผู้เล่นกดปุ่ม Space ตัวละครจะกระโดดขึ้นตามแรงที่กำหนดในตัวแปร jumpForce


การสร้าง UI เพื่อการโต้ตอบ

นอกจากการโต้ตอบในเกมด้วยการเคลื่อนไหวหรือการกดปุ่มแล้ว การสร้าง UI (อินเตอร์เฟสผู้ใช้) เป็นอีกวิธีหนึ่งที่ช่วยให้ผู้เล่นสามารถโต้ตอบกับเกมได้ ตัวอย่างเช่น การสร้างปุ่มเพื่อให้ผู้เล่นคลิกเพื่อเริ่มเกมหรือหยุดเกม:

  1. ไปที่ Hierarchy > Create > UI > Button เพื่อสร้างปุ่ม
  2. ปรับแต่งปุ่มใน Inspector เช่น การเปลี่ยนข้อความในปุ่มหรือปรับขนาด
  3. ใช้โค้ดเพื่อตอบสนองเมื่อผู้เล่นคลิกปุ่ม ตัวอย่างเช่น:

using UnityEngine;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{
    public Button startButton;

    void Start()
    {
        startButton.onClick.AddListener(StartGame);
    }

    void StartGame()
    {
        Debug.Log("Game Started!");
        // เริ่มเกมหรือทำการเปลี่ยนฉาก
    }
}

ในโค้ดนี้ เมื่อผู้เล่นคลิกที่ปุ่ม startButton ฟังก์ชัน StartGame จะถูกเรียกและสามารถเริ่มเกมหรือทำการกระทำอื่น ๆ ได้


Free Joomla templates by Ltheme