บทที่ 3: ระบบการเก็บคะแนนและการจัดการข้อมูลในเกม

ระบบการเก็บคะแนน (Score System) เป็นหนึ่งในองค์ประกอบสำคัญของเกมหลายประเภท ไม่ว่าจะเป็นเกมผจญภัย, เกมการแข่งขัน, หรือเกมไขปริศนา การแสดงคะแนนให้ผู้เล่นเห็นเป็นการกระตุ้นความท้าทายและสร้างเป้าหมายในการเล่น ในบทนี้เราจะเรียนรู้วิธีสร้างระบบการเก็บคะแนนและการจัดการข้อมูลในเกม เช่น จำนวนชีวิตของผู้เล่น (Lives), คะแนน (Score), และเวลา (Timer) รวมถึงวิธีการแสดงผลข้อมูลเหล่านี้ผ่าน UI (User Interface)


การสร้างระบบเก็บคะแนน (Score System)

การสร้างระบบการเก็บคะแนนเริ่มต้นจากการสร้างตัวแปรเพื่อเก็บค่าคะแนนของผู้เล่น และอัปเดตค่าคะแนนเมื่อผู้เล่นทำภารกิจสำเร็จหรือเก็บไอเท็ม เราจะใช้ UI Text ในการแสดงผลคะแนนให้ผู้เล่นเห็นบนหน้าจอ

ขั้นตอนการสร้างระบบเก็บคะแนน

  1. เพิ่ม Text ลงในหน้าจอ UI โดยไปที่ Hierarchy > คลิกขวา > UI > Text เพื่อสร้างกล่องข้อความที่จะแสดงคะแนน
  2. ตั้งชื่อกล่องข้อความว่า ScoreText และปรับขนาดหรือฟอนต์ตามที่ต้องการใน Inspector
  3. เขียนโค้ด 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 ช่วยให้นักเรียนสามารถแสดงผลข้อมูลเหล่านี้บนหน้าจอ และเพิ่มประสบการณ์การเล่นเกมให้สนุกยิ่งขึ้น

Free Joomla templates by Ltheme