บทที่ 8: การเพิ่มเสียงและ UI ในเกม
เสียงและ UI (User Interface) เป็นส่วนประกอบที่สำคัญในการทำให้เกมมีความสมจริงและประสบการณ์การเล่นที่ดีขึ้น เสียงช่วยเพิ่มอรรถรสในการเล่นเกม ส่วน UI ช่วยให้ผู้เล่นสามารถโต้ตอบและรับข้อมูลจากเกมได้อย่างชัดเจน ในบทนี้เราจะเรียนรู้การเพิ่มเสียงและการสร้าง UI เบื้องต้นในเกม Unity
การเพิ่มเสียงในเกม
Unity รองรับการเพิ่มเสียง (Audio) เข้ามาในเกมได้หลายรูปแบบ ไม่ว่าจะเป็นเสียงพื้นหลัง (Background Music) หรือเสียงเอฟเฟกต์ (Sound Effects) ในการเล่นเสียงในเกมนั้น เราต้องใช้ Audio Source และ Audio Clip
ขั้นตอนการเพิ่มเสียงพื้นหลัง
- นำเข้าไฟล์เสียงที่ต้องการใช้ในเกม โดยคลิกขวาที่ Assets ใน Project Window แล้วเลือก Import New Asset จากนั้นเลือกไฟล์เสียงที่ต้องการนำเข้า
- คลิกเลือกวัตถุที่ต้องการให้เป็นแหล่งเสียง (เช่น กล้องหลัก หรือวัตถุอื่น ๆ ในฉาก)
- ไปที่แถบ Inspector และคลิก Add Component จากนั้นเลือก Audio Source
- ในฟิลด์ Audio Clip ให้เลือกไฟล์เสียงที่นำเข้ามา
- ทำเครื่องหมายที่ Loop หากต้องการให้เสียงเล่นต่อเนื่อง
- ปรับระดับเสียง (Volume) ตามที่ต้องการ
เมื่อทำตามขั้นตอนข้างต้นแล้ว เมื่อเริ่มเกม เสียงพื้นหลังจะเริ่มเล่นทันที
การเพิ่มเสียงเอฟเฟกต์ สำหรับเสียงเอฟเฟกต์ เช่น เสียงกระโดด หรือเสียงชนกัน สามารถทำได้โดยการเพิ่ม Audio Source ให้กับวัตถุที่ต้องการ และควบคุมการเล่นเสียงผ่านโค้ด ตัวอย่างเช่น:
using UnityEngine;
public class PlayerSound : MonoBehaviour
{
public AudioSource jumpSound;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
jumpSound.Play(); // เล่นเสียงเมื่อผู้เล่นกดปุ่ม Space
}
}
}
ในตัวอย่างนี้ เมื่อผู้เล่นกดปุ่ม Space เสียงกระโดดที่กำหนดไว้ใน Audio Source จะถูกเล่น
การสร้าง UI ในเกม
UI เป็นส่วนที่ช่วยให้ผู้เล่นสามารถโต้ตอบกับเกมและรับข้อมูลจากเกมได้ เช่น การสร้างปุ่มเมนู แถบพลังชีวิต หรือกล่องข้อความ คะแนน เกมส่วนใหญ่มี UI ที่ปรากฏบนหน้าจอตลอดเวลา เช่น คะแนนผู้เล่นหรือตัวเลือกเมนู
การสร้างปุ่ม UI
- ไปที่ Hierarchy คลิกขวาเลือก UI > Button เพื่อสร้างปุ่ม
- Unity จะสร้าง Canvas สำหรับจัดการ UI ให้โดยอัตโนมัติ และปุ่มจะถูกสร้างอยู่ใน Canvas
- ใน Inspector ของปุ่ม เราสามารถปรับเปลี่ยนข้อความของปุ่มได้ในฟิลด์ Text
- สามารถเพิ่มฟังก์ชันให้ปุ่มโดยการคลิกที่ On Click แล้วลากวัตถุที่มีสคริปต์ที่ต้องการให้ปุ่มควบคุมมาวาง
ตัวอย่างการเขียนโค้ดควบคุมการทำงานของปุ่ม:
using UnityEngine;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
public Button startButton;
void Start()
{
startButton.onClick.AddListener(StartGame);
}
void StartGame()
{
Debug.Log("Game Started!");
// เพิ่มโค้ดสำหรับเริ่มเกม
}
}
ในตัวอย่างนี้ เมื่อผู้เล่นคลิกที่ปุ่ม startButton
ฟังก์ชัน StartGame
จะถูกเรียกและเกมจะเริ่มต้นขึ้น
การสร้างแถบพลังชีวิต (Health Bar)
แถบพลังชีวิตเป็น UI ที่ใช้บ่อยในเกม Unity สามารถสร้างได้โดยใช้ Slider เพื่อแสดงสถานะพลังชีวิตของผู้เล่น
- ไปที่ Hierarchy คลิกขวาเลือก UI > Slider เพื่อสร้างแถบพลังชีวิต
- ปรับตำแหน่งของแถบพลังชีวิตใน Inspector และเปลี่ยนขนาดหรือสีของแถบตามที่ต้องการ
- ใช้โค้ดเพื่ออัปเดตแถบพลังชีวิตตามสถานะของผู้เล่น ตัวอย่างเช่น:
using UnityEngine;
using UnityEngine.UI;
public class HealthManager : MonoBehaviour
{
public Slider healthBar;
public float maxHealth = 100f;
private float currentHealth;
void Start()
{
currentHealth = maxHealth;
healthBar.maxValue = maxHealth;
healthBar.value = currentHealth;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.H))
{
TakeDamage(10); // ลดพลังชีวิตเมื่อกดปุ่ม H
}
}
void TakeDamage(float damage)
{
currentHealth -= damage;
healthBar.value = currentHealth;
}
}
ในตัวอย่างนี้ เมื่อผู้เล่นกดปุ่ม H พลังชีวิตของผู้เล่นจะลดลง 10 หน่วย และแถบพลังชีวิตจะอัปเดตตามค่าที่เปลี่ยนแปลง
การแสดงคะแนนในเกม (Score Display)
การแสดงคะแนนเป็นส่วนสำคัญในการติดตามความคืบหน้าของผู้เล่น การเพิ่ม UI สำหรับแสดงคะแนนสามารถทำได้ง่าย ๆ ดังนี้:
- ไปที่ Hierarchy คลิกขวาเลือก UI > Text เพื่อสร้างกล่องข้อความสำหรับแสดงคะแนน
- ปรับแต่งฟอนต์ ขนาด และสีของข้อความตามที่ต้องการ
- ใช้โค้ดเพื่ออัปเดตคะแนนเมื่อผู้เล่นทำกิจกรรมต่าง ๆ ในเกม ตัวอย่างโค้ด:
using UnityEngine;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour
{
public Text scoreText;
private int score = 0;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
AddScore(10); // เพิ่มคะแนนเมื่อผู้เล่นกดปุ่ม Space
}
}
void AddScore(int points)
{
score += points;
scoreText.text = "Score: " + score.ToString();
}
}
ในตัวอย่างนี้ เมื่อผู้เล่นกดปุ่ม Space คะแนนจะเพิ่มขึ้น 10 และข้อความแสดงคะแนนจะอัปเดตตามค่าใหม่