บทที่ 7: การสร้าง Storytelling ในเกม
การสร้าง Storytelling (การเล่าเรื่อง) ในเกมเป็นสิ่งที่ช่วยเพิ่มความน่าสนใจและทำให้ผู้เล่นมีส่วนร่วมกับเนื้อหาของเกมมากยิ่งขึ้น ในบทนี้เราจะมาศึกษาวิธีการสร้างการเล่าเรื่องในเกม Unity โดยการใช้ฉาก, ตัวละคร, และข้อความ (Dialogue) รวมถึงการสร้างเหตุการณ์ต่าง ๆ ที่ทำให้เกมมีความต่อเนื่องและสื่อสารเรื่องราวที่น่าติดตาม
การวางโครงเรื่องในเกม
ก่อนที่เราจะสร้างเกม ควรมีการวางโครงเรื่องอย่างง่ายเพื่อให้เข้าใจทิศทางของเกมและเรื่องราวที่ต้องการสื่อ ตัวอย่างเช่น เกมผจญภัยที่ตัวละครหลักต้องเดินทางผ่านด่านต่าง ๆ เพื่อค้นหาไอเท็มที่หายไป การวางโครงเรื่องนี้จะช่วยให้เรากำหนดฉาก (Scenes) ตัวละคร และการโต้ตอบต่าง ๆ ในเกมได้อย่างชัดเจน
การสร้างฉากเพื่อบอกเล่าเรื่องราว
Scenes ใน Unity คือส่วนประกอบสำคัญในการเล่าเรื่องราว เกมส่วนใหญ่มีหลายฉากที่เชื่อมโยงกัน เช่น ฉากเปิดเกม ฉากต่อสู้ และฉากจบ ในการสร้างฉากที่สื่อเรื่องราว สามารถทำได้ดังนี้:
- ไปที่เมนู File > New Scene เพื่อสร้างฉากใหม่
- ในฉากเริ่มต้น สามารถวางวัตถุ ตัวละคร และสภาพแวดล้อมตามที่ต้องการ เช่น ฉากหมู่บ้านหรือฉากป่า
- การสลับไปมาระหว่างฉากสามารถทำได้โดยใช้ 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 ที่ช่วยให้เราสามารถสร้างกล่องข้อความและแสดงบทพูดของตัวละครในเกมได้ โดยทำตามขั้นตอนดังนี้:
- ไปที่ Hierarchy > Create > UI > Text เพื่อสร้างกล่องข้อความ
- ในแถบ Inspector เราสามารถปรับแต่งฟอนต์ สี และขนาดของข้อความได้ตามที่ต้องการ
- ใช้โค้ดเพื่อเปลี่ยนบทพูดเมื่อมีเหตุการณ์เกิดขึ้นในเกม ตัวอย่างโค้ดการเปลี่ยนข้อความ:
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:
- ไปที่ Window > Sequencing > Timeline เพื่อเปิด Timeline Window
- เลือกวัตถุที่ต้องการในฉาก จากนั้นคลิก Create เพื่อสร้างไทม์ไลน์ใหม่
- เราสามารถเพิ่มการเคลื่อนไหว, แอนิเมชัน หรือเปลี่ยนแปลงตำแหน่งของตัวละครในไทม์ไลน์นี้ได้
- เมื่อถึงจุดที่กำหนด ไทม์ไลน์จะทำงานและแสดง 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 กล่องข้อความบทสนทนาจะปรากฏขึ้น และเมื่อผู้เล่นเดินออกไป กล่องข้อความจะถูกซ่อน