บทที่ 7: การสร้าง Storytelling ในเกม

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


การวางโครงเรื่องในเกม

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

การสร้างฉากเพื่อบอกเล่าเรื่องราว

Scenes ใน Unity คือส่วนประกอบสำคัญในการเล่าเรื่องราว เกมส่วนใหญ่มีหลายฉากที่เชื่อมโยงกัน เช่น ฉากเปิดเกม ฉากต่อสู้ และฉากจบ ในการสร้างฉากที่สื่อเรื่องราว สามารถทำได้ดังนี้:

  1. ไปที่เมนู File > New Scene เพื่อสร้างฉากใหม่
  2. ในฉากเริ่มต้น สามารถวางวัตถุ ตัวละคร และสภาพแวดล้อมตามที่ต้องการ เช่น ฉากหมู่บ้านหรือฉากป่า
  3. การสลับไปมาระหว่างฉากสามารถทำได้โดยใช้ SceneManager ในการเปลี่ยนฉากเมื่อผู้เล่นผ่านด่านหรือทำภารกิจสำเร็จ

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


using UnityEngine;
using UnityEngine.SceneManagement;

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

การสร้างบทพูดของตัวละคร (Dialogue)

การใช้ Dialogue เป็นอีกหนึ่งวิธีในการบอกเล่าเรื่องราวให้กับผู้เล่น Unity มีระบบ UI ที่ช่วยให้เราสามารถสร้างกล่องข้อความและแสดงบทพูดของตัวละครในเกมได้ โดยทำตามขั้นตอนดังนี้:

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

using UnityEngine;
using UnityEngine.UI;

public class DialogueManager : MonoBehaviour
{
    public Text dialogueText;
    private string[] dialogueLines = { "Hello, traveler!", "Welcome to our village.", "Be careful out there." };
    private int currentLine = 0;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            DisplayNextLine();
        }
    }

    void DisplayNextLine()
    {
        if (currentLine < dialogueLines.Length)
        {
            dialogueText.text = dialogueLines[currentLine];
            currentLine++;
        }
        else
        {
            dialogueText.text = ""; // ลบข้อความเมื่อจบบทพูด
        }
    }
}

ในตัวอย่างนี้ เมื่อผู้เล่นกดปุ่ม Space บทพูดของตัวละครจะเปลี่ยนไปเรื่อย ๆ ตามลำดับใน dialogueLines จนกว่าจะจบการสนทนา


การใช้ Cutscenes ในการเล่าเรื่อง

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

  1. ไปที่ Window > Sequencing > Timeline เพื่อเปิด Timeline Window
  2. เลือกวัตถุที่ต้องการในฉาก จากนั้นคลิก Create เพื่อสร้างไทม์ไลน์ใหม่
  3. เราสามารถเพิ่มการเคลื่อนไหว, แอนิเมชัน หรือเปลี่ยนแปลงตำแหน่งของตัวละครในไทม์ไลน์นี้ได้
  4. เมื่อถึงจุดที่กำหนด ไทม์ไลน์จะทำงานและแสดง Cutscene ให้กับผู้เล่น

การเชื่อมโยงการเล่าเรื่องกับการโต้ตอบของผู้เล่น

การเล่าเรื่องในเกมควรมีการโต้ตอบกับผู้เล่นเพื่อให้ผู้เล่นรู้สึกมีส่วนร่วมกับเรื่องราว ตัวอย่างเช่น เมื่อผู้เล่นเดินเข้าใกล้ตัวละครที่มีบทพูด กล่องข้อความบทสนทนาจะปรากฏขึ้น หรือเมื่อผู้เล่นเก็บไอเท็มสำคัญ บทสนทนาหรือฉากคั่นอาจจะเริ่มขึ้นทันที

การเขียนโค้ดเพื่อตรวจสอบว่าเมื่อใดที่ผู้เล่นเข้าใกล้ตัวละครแล้วแสดงบทสนทนา:


using UnityEngine;

public class NPCInteraction : MonoBehaviour
{
    public GameObject dialogueBox;
    private bool playerNearby = false;

    void Update()
    {
        if (playerNearby && Input.GetKeyDown(KeyCode.E))
        {
            dialogueBox.SetActive(true); // แสดงบทสนทนาเมื่อผู้เล่นกดปุ่ม E
        }
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag == "Player")
        {
            playerNearby = true;
        }
    }

    void OnTriggerExit2D(Collider2D other)
    {
        if (other.gameObject.tag == "Player")
        {
            playerNearby = false;
            dialogueBox.SetActive(false); // ซ่อนบทสนทนาเมื่อผู้เล่นเดินออกจากพื้นที่
        }
    }
}

ในโค้ดนี้ เมื่อผู้เล่นเข้าใกล้ NPC แล้วกดปุ่ม E กล่องข้อความบทสนทนาจะปรากฏขึ้น และเมื่อผู้เล่นเดินออกไป กล่องข้อความจะถูกซ่อน


Free Joomla templates by Ltheme