บทที่ 6: การโต้ตอบของผู้เล่นกับเกม
ในเกม การโต้ตอบของผู้เล่นกับวัตถุหรือสิ่งต่าง ๆ ในเกมเป็นส่วนสำคัญที่ทำให้เกมน่าสนใจยิ่งขึ้น Unity มีเครื่องมือที่ช่วยให้การโต้ตอบเหล่านี้สามารถทำได้ง่ายและยืดหยุ่น เช่น การตรวจจับการชนกันของวัตถุ (Collisions) และการสร้างเหตุการณ์ต่าง ๆ เมื่อมีการกระทำจากผู้เล่น (Events) ในบทนี้เราจะเรียนรู้วิธีการสร้างการโต้ตอบเบื้องต้นในเกม
การตรวจจับการชนกัน (Collisions)
การตรวจจับการชนกันเป็นพื้นฐานสำคัญในการพัฒนาเกม ตัวอย่างเช่น การชนกันระหว่างตัวละครกับกำแพง หรือการเก็บไอเท็มเมื่อเดินผ่าน Unity ใช้ Collider และ Rigidbody ในการตรวจจับการชนกันของวัตถุต่าง ๆ
- ไปที่วัตถุที่ต้องการตรวจจับการชนใน Hierarchy เช่น ตัวละครหลัก หรือไอเท็ม
- เพิ่ม Collider ให้กับวัตถุโดยไปที่ Inspector > Add Component > พิมพ์ค้นหา Collider ที่ต้องการ เช่น Box Collider สำหรับวัตถุ 3D หรือ Circle Collider 2D สำหรับวัตถุ 2D
- หากวัตถุมีการเคลื่อนที่ ให้เพิ่ม 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 ให้กับวัตถุ สามารถทำได้ดังนี้:
- เพิ่ม Collider ให้กับวัตถุที่ต้องการทำเป็น Trigger
- ใน Inspector ให้ทำเครื่องหมายที่ตัวเลือก Is Trigger
- ใช้โค้ดเพื่อตรวจจับการชนด้วย 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 (อินเตอร์เฟสผู้ใช้) เป็นอีกวิธีหนึ่งที่ช่วยให้ผู้เล่นสามารถโต้ตอบกับเกมได้ ตัวอย่างเช่น การสร้างปุ่มเพื่อให้ผู้เล่นคลิกเพื่อเริ่มเกมหรือหยุดเกม:
- ไปที่ Hierarchy > Create > UI > Button เพื่อสร้างปุ่ม
- ปรับแต่งปุ่มใน Inspector เช่น การเปลี่ยนข้อความในปุ่มหรือปรับขนาด
- ใช้โค้ดเพื่อตอบสนองเมื่อผู้เล่นคลิกปุ่ม ตัวอย่างเช่น:
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
จะถูกเรียกและสามารถเริ่มเกมหรือทำการกระทำอื่น ๆ ได้