บทที่ 9: การสร้างเกมหลายด่าน (Multiple Scenes)

ในเกมหลายเกม ผู้เล่นต้องเล่นผ่านด่านหรือฉาก (Scenes) ต่าง ๆ เพื่อดำเนินการไปสู่เป้าหมายต่อไป ใน Unity เราสามารถสร้างด่านหลายด่านหรือหลายฉากได้อย่างง่ายดาย โดยใช้ระบบ Scenes ของ Unity ระบบนี้จะช่วยให้เราสามารถสร้างฉากต่าง ๆ แยกจากกัน และเปลี่ยนฉากเมื่อผู้เล่นทำตามเงื่อนไขหรือผ่านด่านสำเร็จ ในบทนี้เราจะเรียนรู้วิธีสร้างเกมที่มีหลายด่านและวิธีการเปลี่ยนฉากใน Unity


การสร้างหลายฉาก (Scenes)

ฉาก (Scenes) ใน Unity คือพื้นที่ที่แยกกัน ซึ่งอาจเป็นด่าน (Levels) หรือสถานที่ต่าง ๆ ในเกม เช่น ฉากเริ่มต้น ฉากผจญภัย หรือฉากจบ

ขั้นตอนการสร้างฉากใหม่

  1. ไปที่เมนู File > New Scene เพื่อสร้างฉากใหม่
  2. เมื่อสร้างฉากเสร็จแล้ว เราสามารถเพิ่มวัตถุและตัวละครลงในฉากตามที่ต้องการ เช่น การสร้างวัตถุที่เป็นพื้นดินหรือฉากหลัง (Background)
  3. บันทึกฉากโดยไปที่ File > Save As ตั้งชื่อฉากตามความเหมาะสม เช่น "Level1" หรือ "MainMenu"

เมื่อเรามีหลายฉากแล้ว เราสามารถสลับไปมาระหว่างฉากเหล่านี้ได้โดยใช้ระบบ SceneManager ของ Unity

การสลับฉากด้วย SceneManager

การสลับฉากเมื่อผู้เล่นทำภารกิจสำเร็จหรือผ่านด่านสามารถทำได้ด้วยโค้ดโดยใช้ SceneManager ใน Unity เราจะใช้ฟังก์ชัน LoadScene() เพื่อเปลี่ยนไปยังฉากถัดไป ตัวอย่างเช่น เมื่อผู้เล่นเดินผ่านประตูหรือพื้นที่ที่กำหนดไว้

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


using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneSwitcher : MonoBehaviour
{
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag == "Player")
        {
            SceneManager.LoadScene("NextLevel"); // เปลี่ยนไปยังฉากถัดไปเมื่อผู้เล่นเดินเข้าไปในพื้นที่
        }
    }
}

ในโค้ดนี้ เมื่อผู้เล่นชนกับวัตถุที่มีแท็กว่า "Player" ระบบจะทำการเปลี่ยนไปยังฉากที่ชื่อว่า "NextLevel"


การเปลี่ยนฉากด้วยปุ่ม

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

  1. สร้างปุ่ม UI โดยไปที่ Hierarchy > UI > Button
  2. เพิ่มโค้ดเพื่อควบคุมการเปลี่ยนฉากเมื่อปุ่มถูกคลิก

ตัวอย่างโค้ดการเปลี่ยนฉากเมื่อคลิกปุ่ม


using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class MainMenu : MonoBehaviour
{
    public Button startButton;

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

    void StartGame()
    {
        SceneManager.LoadScene("Level1"); // เปลี่ยนไปยังด่านแรกเมื่อคลิกปุ่มเริ่มเกม
    }
}

ในโค้ดนี้ เมื่อผู้เล่นคลิกปุ่ม startButton ระบบจะเปลี่ยนไปยังฉาก "Level1"


การโหลดฉากต่อเนื่อง (Loading Scenes)

Unity ยังมีระบบที่ช่วยให้เราสามารถโหลดฉากใหม่ในขณะที่ฉากปัจจุบันยังคงแสดงอยู่ได้ ระบบนี้เรียกว่า Loading Scenes หรือการโหลดฉากต่อเนื่อง ซึ่งเป็นประโยชน์เมื่อเราต้องการโหลดข้อมูลในฉากใหม่ระหว่างการเปลี่ยนฉาก

ตัวอย่างการสร้างฉากโหลด (Loading Scene)

  1. สร้างฉากใหม่ที่ใช้สำหรับแสดงข้อความหรือภาพระหว่างการโหลด เช่น ฉากที่แสดงคำว่า "Loading..."
  2. ในการโหลดฉากพร้อมกันสามารถใช้ฟังก์ชัน LoadSceneAsync() ตัวอย่างเช่น:

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class LoadingScene : MonoBehaviour
{
    public Text loadingText;

    void Start()
    {
        StartCoroutine(LoadLevelAsync("NextLevel"));
    }

    IEnumerator LoadLevelAsync(string sceneName)
    {
        AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName);

        while (!operation.isDone)
        {
            loadingText.text = "Loading... " + (operation.progress * 100).ToString("F0") + "%";
            yield return null;
        }
    }
}

ในโค้ดนี้ เราใช้ฟังก์ชัน LoadSceneAsync() เพื่อโหลดฉากใหม่ และแสดงเปอร์เซ็นต์ความคืบหน้าของการโหลดในข้อความ loadingText

การใช้ DontDestroyOnLoad สำหรับวัตถุที่ไม่ต้องการให้ถูกทำลาย

บางครั้งเราอาจต้องการให้วัตถุหรือข้อมูลคงอยู่ระหว่างการเปลี่ยนฉาก เช่น คะแนนของผู้เล่นหรือเพลงประกอบ เราสามารถใช้ฟังก์ชัน DontDestroyOnLoad() เพื่อให้วัตถุไม่ถูกทำลายเมื่อมีการเปลี่ยนฉาก

ตัวอย่างการใช้ DontDestroyOnLoad


using UnityEngine;

public class MusicManager : MonoBehaviour
{
    void Awake()
    {
        DontDestroyOnLoad(gameObject); // ไม่ให้วัตถุนี้ถูกทำลายเมื่อเปลี่ยนฉาก
    }
}

ในโค้ดนี้ วัตถุที่มี MusicManager ติดอยู่จะยังคงอยู่เมื่อมีการเปลี่ยนฉาก ทำให้เสียงเพลงที่เล่นไม่ถูกหยุด


Free Joomla templates by Ltheme