บทที่ 7: การสร้างเกมหลายด่านที่มีความท้าทายมากขึ้น

การสร้างเกมที่มีหลายด่าน (Multiple Levels) เป็นวิธีหนึ่งในการเพิ่มความท้าทายและความน่าสนใจให้กับเกม เกมที่มีหลายด่านมักจะมีการเปลี่ยนแปลงความยากของแต่ละด่าน และมีเป้าหมายที่ต่างกันเพื่อกระตุ้นให้ผู้เล่นต้องใช้ทักษะและความสามารถที่เพิ่มมากขึ้นในการผ่านด่านไปเรื่อย ๆ การออกแบบด่านที่ดีควรมีการปรับระดับความยากอย่างเหมาะสม รวมถึงการจัดวางสิ่งกีดขวางและศัตรูในลักษณะที่ท้าทายแต่ยังคงความยุติธรรมในการเล่น

ในบทนี้ เราจะเรียนรู้วิธีการออกแบบเกมหลายด่านใน Unity ตั้งแต่การสร้างแต่ละด่าน, การเปลี่ยนด่าน (Scene Switching), ไปจนถึงการบันทึกความคืบหน้า (Saving Progress) ของผู้เล่น และการปลดล็อกด่านถัดไปเมื่อผ่านเงื่อนไขที่กำหนด


การสร้างด่าน (Level Creation)

การออกแบบด่าน (Level Design) คือการกำหนดโครงสร้างของแต่ละด่านในเกม รวมถึงการจัดวางฉาก, ศัตรู, สิ่งกีดขวาง และไอเท็มต่าง ๆ ที่ผู้เล่นจะต้องโต้ตอบ การจัดวางที่ดีควรมีความท้าทายและสนุกสนานสำหรับผู้เล่น

ขั้นตอนการสร้างด่าน

  1. สร้าง Scene ใหม่สำหรับแต่ละด่านโดยไปที่ File > New Scene
  2. ตั้งชื่อ Scene ตามด่าน เช่น Level1 หรือ Stage1
  3. เพิ่มวัตถุต่าง ๆ ในด่าน เช่น พื้นดิน, สิ่งกีดขวาง, ศัตรู และไอเท็ม
  4. ตั้งค่า NavMesh หรือ Collider เพื่อให้ตัวละครสามารถโต้ตอบกับวัตถุเหล่านี้ได้
  5. สร้างปุ่ม UI หรือระบบตรวจจับเพื่อให้ผู้เล่นสามารถเปลี่ยนไปยังด่านถัดไปได้เมื่อผ่านด่าน

การเปลี่ยนด่าน (Scene Switching)

เมื่อผู้เล่นผ่านด่านสำเร็จ เกมจะต้องทำการเปลี่ยนจากด่านหนึ่งไปยังอีกด่านหนึ่ง Unity มีระบบ SceneManager ที่สามารถใช้ในการเปลี่ยนด่านได้อย่างง่ายดาย

ตัวอย่างโค้ดการเปลี่ยนด่าน


using UnityEngine;
using UnityEngine.SceneManagement;

public class LevelManager : MonoBehaviour
{
    public void LoadNextLevel()
    {
        int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
        SceneManager.LoadScene(currentSceneIndex + 1); // โหลดด่านถัดไป
    }
}

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

  • ฟังก์ชัน SceneManager.GetActiveScene() ใช้เพื่อดึงข้อมูลของด่านปัจจุบัน
  • ฟังก์ชัน SceneManager.LoadScene() ใช้เพื่อโหลดด่านใหม่ โดยในที่นี้จะโหลดด่านถัดไปจากด่านปัจจุบัน

การปลดล็อกด่าน (Level Unlocking)

เกมหลายด่านมักจะมีระบบการปลดล็อกด่าน (Unlocking Levels) ที่ผู้เล่นสามารถเล่นด่านถัดไปได้ก็ต่อเมื่อผ่านด่านก่อนหน้า การปลดล็อกด่านสามารถทำได้โดยการบันทึกความคืบหน้าของผู้เล่น

การบันทึกความคืบหน้า (Saving Progress) เราสามารถบันทึกข้อมูลการปลดล็อกด่านโดยใช้ PlayerPrefs ซึ่งเป็นฟีเจอร์ใน Unity ที่ใช้ในการจัดเก็บข้อมูลที่ง่ายและสะดวก เช่น การบันทึกด่านที่ผู้เล่นผ่านแล้ว

ตัวอย่างโค้ดการบันทึกและปลดล็อกด่าน


using UnityEngine;
using UnityEngine.SceneManagement;

public class LevelUnlocker : MonoBehaviour
{
    public int levelToUnlock = 2; // ด่านที่ต้องการปลดล็อก

    void Start()
    {
        // ตรวจสอบว่าด่านนี้ถูกปลดล็อกแล้วหรือไม่
        if (PlayerPrefs.GetInt("UnlockedLevel", 1) < levelToUnlock)
        {
            Debug.Log("ด่านนี้ยังไม่ถูกปลดล็อก");
            // สามารถใส่โค้ดเพิ่มเติมเพื่อแสดงข้อความหรือปิดการเข้าถึงด่านนี้
        }
    }

    public void UnlockNextLevel()
    {
        // ปลดล็อกด่านถัดไป
        PlayerPrefs.SetInt("UnlockedLevel", levelToUnlock);
        Debug.Log("ปลดล็อกด่านถัดไปเรียบร้อยแล้ว!");
    }
}

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

  • PlayerPrefs.GetInt() ใช้เพื่อดึงข้อมูลว่าผู้เล่นผ่านด่านไปถึงระดับไหนแล้ว
  • PlayerPrefs.SetInt() ใช้เพื่อบันทึกข้อมูลด่านที่ผู้เล่นปลดล็อก
  • เมื่อผู้เล่นผ่านด่าน เราสามารถใช้ฟังก์ชันนี้เพื่อปลดล็อกด่านถัดไป

การเพิ่มความท้าทายในด่าน (Increasing Difficulty)

เพื่อให้เกมมีความน่าสนใจและท้าทายมากขึ้น เราสามารถปรับเปลี่ยนองค์ประกอบต่าง ๆ ในแต่ละด่าน เช่น:

  1. การเพิ่มจำนวนศัตรู: ในด่านที่ยากขึ้น ศัตรูอาจจะมากขึ้นหรือเคลื่อนไหวเร็วขึ้น
  2. การจัดวางสิ่งกีดขวางที่ซับซ้อนขึ้น: เช่น เพิ่มสิ่งกีดขวางที่เคลื่อนไหวหรือหมุนได้ เพื่อให้ผู้เล่นต้องใช้ทักษะในการหลบหลีกมากขึ้น
  3. เพิ่มเวลาจำกัด (Time Limits): การกำหนดเวลาที่จำกัดให้ผู้เล่นผ่านด่านจะเพิ่มความท้าทาย
  4. การเพิ่มบอส (Boss Levels): ด่านสุดท้ายอาจจะมีการต่อสู้กับบอสที่มีพลังสูงและต้องใช้ทักษะในการต่อสู้มากกว่าปกติ

ตัวอย่างโค้ดการเพิ่มความยากด้วยจำนวนศัตรู


using UnityEngine;

public class EnemySpawner : MonoBehaviour
{
    public GameObject enemyPrefab;
    public int enemyCount = 5; // จำนวนศัตรูที่ต้องการให้ปรากฏในด่าน

    void Start()
    {
        for (int i = 0; i < enemyCount; i++)
        {
            SpawnEnemy(); // เรียกใช้ฟังก์ชันสร้างศัตรู
        }
    }

    void SpawnEnemy()
    {
        Instantiate(enemyPrefab, GetRandomPosition(), Quaternion.identity); // สร้างศัตรูใหม่ในตำแหน่งสุ่ม
    }

    Vector3 GetRandomPosition()
    {
        float x = Random.Range(-10f, 10f);
        float z = Random.Range(-10f, 10f);
        return new Vector3(x, 0, z); // คืนค่าตำแหน่งสุ่ม
    }
}

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

  • ฟังก์ชัน SpawnEnemy() ใช้เพื่อสร้างศัตรูในตำแหน่งสุ่ม โดยจำนวนศัตรูที่สร้างจะขึ้นอยู่กับตัวแปร enemyCount

การสร้างระบบ UI เพื่อแสดงความคืบหน้าของผู้เล่น

การแสดงความคืบหน้า (Progress) ของผู้เล่นในแต่ละด่าน เช่น จำนวนไอเท็มที่เก็บได้ หรือจำนวนด่านที่ผ่านแล้ว เป็นส่วนสำคัญในการกระตุ้นให้ผู้เล่นมีเป้าหมายชัดเจนในการเล่นเกม

ตัวอย่างโค้ดแสดงความคืบหน้าของผู้เล่นผ่าน UI


using UnityEngine;
using UnityEngine.UI;

public class LevelProgress : MonoBehaviour
{
    public Text progressText;
    private int itemsCollected = 0;
    private int totalItems = 5;

    void Start()
    {
        UpdateProgressText();
    }

    public void CollectItem()
    {
        itemsCollected++;
        UpdateProgressText();
    }

    void UpdateProgressText()
    {
        progressText.text = "Items Collected: " + itemsCollected + "/" + totalItems;
    }
}

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

  • ฟังก์ชัน CollectItem() จะถูกเรียกเมื่อผู้เล่นเก็บไอเท็มสำเร็จ
  • UpdateProgressText() จะแสดงจำนวนไอเท็มที่เก็บได้เทียบกับจำนวนไอเท็มทั้งหมดบนหน้าจอผ่าน UI Text

บทที่ 7 นี้ช่วยให้นักเรียนได้เรียนรู้วิธีการออกแบบเกมหลายด่าน ตั้งแต่การสร้างด่าน, การเปลี่ยนด่าน, การปลดล็อกด่านถัดไป ไปจนถึงการเพิ่มความท้าทายในการเล่น นักเรียนจะสามารถสร้างเกมที่มีความยากเพิ่มขึ้นเรื่อย ๆ เพื่อให้เกมมีความน่าสนใจและสนุกยิ่งขึ้น


Free Joomla templates by Ltheme