บทที่ 3: ระบบการเก็บคะแนนและการจัดการข้อมูลในเกม
ระบบการเก็บคะแนน (Score System) เป็นหนึ่งในองค์ประกอบสำคัญของเกมหลายประเภท ไม่ว่าจะเป็นเกมผจญภัย, เกมการแข่งขัน, หรือเกมไขปริศนา การแสดงคะแนนให้ผู้เล่นเห็นเป็นการกระตุ้นความท้าทายและสร้างเป้าหมายในการเล่น ในบทนี้เราจะเรียนรู้วิธีสร้างระบบการเก็บคะแนนและการจัดการข้อมูลในเกม เช่น จำนวนชีวิตของผู้เล่น (Lives), คะแนน (Score), และเวลา (Timer) รวมถึงวิธีการแสดงผลข้อมูลเหล่านี้ผ่าน UI (User Interface)
การสร้างระบบเก็บคะแนน (Score System)
การสร้างระบบการเก็บคะแนนเริ่มต้นจากการสร้างตัวแปรเพื่อเก็บค่าคะแนนของผู้เล่น และอัปเดตค่าคะแนนเมื่อผู้เล่นทำภารกิจสำเร็จหรือเก็บไอเท็ม เราจะใช้ UI Text ในการแสดงผลคะแนนให้ผู้เล่นเห็นบนหน้าจอ
ขั้นตอนการสร้างระบบเก็บคะแนน
- เพิ่ม Text ลงในหน้าจอ UI โดยไปที่ Hierarchy > คลิกขวา > UI > Text เพื่อสร้างกล่องข้อความที่จะแสดงคะแนน
- ตั้งชื่อกล่องข้อความว่า ScoreText และปรับขนาดหรือฟอนต์ตามที่ต้องการใน Inspector
- เขียนโค้ด C# เพื่อควบคุมการเก็บและอัปเดตคะแนนในเกม
ตัวอย่างโค้ดการเก็บคะแนน
using UnityEngine;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour
{
public int score = 0;
public Text scoreText;
void Start()
{
UpdateScoreText();
}
public void AddScore(int points)
{
score += points; // เพิ่มคะแนน
UpdateScoreText();
}
void UpdateScoreText()
{
scoreText.text = "Score: " + score.ToString(); // อัปเดตข้อความแสดงคะแนน
}
}
คำอธิบายโค้ด
- ตัวแปร score ใช้เก็บค่าคะแนนของผู้เล่น
- ฟังก์ชัน AddScore(int points) ใช้สำหรับเพิ่มคะแนนเมื่อผู้เล่นทำภารกิจสำเร็จ
- ฟังก์ชัน UpdateScoreText() ใช้ในการอัปเดตข้อความแสดงคะแนนในกล่องข้อความ (UI Text) บนหน้าจอ
การเพิ่มคะแนนเมื่อผู้เล่นเก็บไอเท็ม
ในกรณีที่ผู้เล่นเก็บไอเท็ม เช่น เหรียญ หรือเก็บสมบัติในเกม เราจะเรียกใช้ฟังก์ชัน AddScore() เพื่อเพิ่มคะแนน
ตัวอย่างโค้ดการเพิ่มคะแนนเมื่อเก็บไอเท็ม
using UnityEngine;
public class ItemCollector : MonoBehaviour
{
public ScoreManager scoreManager;
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Item")
{
scoreManager.AddScore(10); // เพิ่มคะแนนเมื่อเก็บไอเท็ม
Destroy(other.gameObject); // ทำลายไอเท็มหลังจากเก็บ
}
}
}
การจัดการข้อมูลในเกม
นอกจากระบบเก็บคะแนนแล้ว เรายังสามารถจัดการข้อมูลอื่น ๆ เช่น จำนวนชีวิตของผู้เล่น หรือเวลาที่ใช้ในการเล่นเกม ข้อมูลเหล่านี้มีบทบาทสำคัญในการกำหนดเงื่อนไขการชนะหรือแพ้ของผู้เล่น
การจัดการจำนวนชีวิตของผู้เล่น (Lives System)
ระบบจำนวนชีวิตของผู้เล่น (Lives System) ใช้ในการกำหนดว่าผู้เล่นมีจำนวนครั้งในการเล่นเท่าใดก่อนเกมจะจบ หากจำนวนชีวิตหมด เกมจะสิ้นสุดหรือเริ่มใหม่
ตัวอย่างโค้ดระบบจำนวนชีวิตของผู้เล่น
using UnityEngine;
using UnityEngine.UI;
public class LivesManager : MonoBehaviour
{
public int lives = 3;
public Text livesText;
void Start()
{
UpdateLivesText();
}
public void LoseLife()
{
lives--; // ลดจำนวนชีวิต
UpdateLivesText();
if (lives <= 0)
{
GameOver(); // เรียกฟังก์ชันจบเกมหากชีวิตหมด
}
}
void UpdateLivesText()
{
livesText.text = "Lives: " + lives.ToString(); // อัปเดตข้อความแสดงจำนวนชีวิต
}
void GameOver()
{
Debug.Log("Game Over!"); // แสดงข้อความจบเกม
// สามารถใส่โค้ดเพิ่มเติมสำหรับการจบเกม เช่น เปลี่ยนฉาก หรือรีเซ็ตเกม
}
}
ในโค้ดนี้ เมื่อผู้เล่นสูญเสียชีวิต (โดยการเรียก LoseLife()), จำนวนชีวิตจะลดลง 1 และจะแสดงผลบนหน้าจอ หากจำนวนชีวิตเท่ากับ 0 เกมจะจบ
การสร้างระบบจับเวลา (Timer System)
ระบบจับเวลา (Timer) ใช้เพื่อกำหนดระยะเวลาที่ผู้เล่นมีในการเล่นเกม หรือใช้ในการจับเวลาที่ใช้ไปในแต่ละด่าน
ตัวอย่างโค้ดระบบจับเวลา
using UnityEngine;
using UnityEngine.UI;
public class Timer : MonoBehaviour
{
public float timeRemaining = 60f;
public Text timerText;
void Update()
{
if (timeRemaining > 0)
{
timeRemaining -= Time.deltaTime; // ลดค่าของเวลาในทุกวินาที
UpdateTimerText();
}
else
{
GameOver();
}
}
void UpdateTimerText()
{
timerText.text = "Time: " + Mathf.Floor(timeRemaining).ToString(); // แสดงเวลาที่เหลือ
}
void GameOver()
{
Debug.Log("เวลาหมด! เกมจบ!");
// สามารถใส่โค้ดเพิ่มเติมสำหรับการจบเกมเมื่อเวลาหมด
}
}
คำอธิบายโค้ด
- ตัวแปร timeRemaining ใช้เก็บค่าของเวลาที่เหลืออยู่ในเกม
- ฟังก์ชัน Update() จะลดค่าของเวลาลงทุกวินาที (โดยใช้ Time.deltaTime ซึ่งคือเวลาที่ผ่านไปในแต่ละเฟรม) และเมื่อเวลาหมด เกมจะจบ
บทที่ 3 นี้ช่วยให้นักเรียนได้เรียนรู้การสร้างระบบการเก็บคะแนน ระบบจัดการจำนวนชีวิต และระบบจับเวลา ซึ่งเป็นส่วนประกอบสำคัญในเกมหลายประเภท การทำงานร่วมกับระบบ UI ช่วยให้นักเรียนสามารถแสดงผลข้อมูลเหล่านี้บนหน้าจอ และเพิ่มประสบการณ์การเล่นเกมให้สนุกยิ่งขึ้น