บทที่ 8: การเพิ่มเสียงและการควบคุมเสียงในเกม
เสียงเป็นองค์ประกอบที่สำคัญอย่างมากในการสร้างบรรยากาศและอารมณ์ให้กับเกม การจัดการเสียงที่ดีจะทำให้เกมดูสมจริงและน่าตื่นเต้นมากขึ้น Unity มีระบบเสียงที่ช่วยให้ผู้พัฒนาเกมสามารถเพิ่ม เอฟเฟกต์เสียง (Sound Effects), ดนตรีประกอบ (Background Music), และการควบคุมเสียงต่าง ๆ อย่างละเอียด การจัดการเสียงในเกมประกอบด้วยการเพิ่มเสียงในแต่ละฉาก การควบคุมระดับเสียง (Volume) และการสร้างระบบเสียงที่เปลี่ยนแปลงตามสภาพแวดล้อมหรือเหตุการณ์ในเกม
ในบทนี้ เราจะเรียนรู้วิธีการเพิ่มเสียงในเกม, การควบคุมเสียงในสถานการณ์ต่าง ๆ, และการเขียนโค้ดเพื่อจัดการระบบเสียงให้ทำงานได้อย่างมีประสิทธิภาพมากขึ้น
การเพิ่มเสียงพื้นฐานในเกม
Unity มีคอมโพเนนต์ที่ชื่อว่า Audio Source ซึ่งใช้ในการเล่นเสียงในเกม โดยสามารถใช้เล่นดนตรีประกอบ หรือเสียงเอฟเฟกต์ เช่น เสียงกระโดดหรือเสียงชน
ขั้นตอนการเพิ่มเสียงพื้นฐานใน Unity
- นำเข้าไฟล์เสียงที่ต้องการใช้ในเกม โดยไปที่ Assets > คลิกขวา > Import New Asset แล้วเลือกไฟล์เสียงที่ต้องการ
- เพิ่มคอมโพเนนต์ Audio Source ให้กับวัตถุในเกม โดยเลือกวัตถุใน Hierarchy และไปที่ Inspector > Add Component > พิมพ์ค้นหา Audio Source
- ใน Audio Source สามารถเลือกไฟล์เสียงที่นำเข้ามาในฟิลด์ Audio Clip
- หากต้องการให้เสียงเล่นอย่างต่อเนื่อง สามารถเลือกตัวเลือก Loop
ตัวอย่างการเพิ่มเสียงพื้นหลัง (Background Music)
- นำเข้าไฟล์เสียงดนตรีประกอบที่ต้องการใช้
- เพิ่ม Audio Source ให้กับวัตถุ Main Camera หรือวัตถุอื่นในฉาก
- ตั้งค่า Audio Source ให้เล่นเสียงดนตรีประกอบ และทำเครื่องหมายที่ Loop เพื่อให้เสียงเล่นวนไปเรื่อย ๆ
การควบคุมเสียงผ่านโค้ด C#
เราสามารถควบคุมการเล่นเสียงใน Unity ผ่านการเขียนโค้ด C# ซึ่งจะทำให้เราสามารถเปิดหรือปิดเสียงตามสถานการณ์ต่าง ๆ ในเกม เช่น เมื่อผู้เล่นกระโดด, ยิงปืน, หรือชนวัตถุ
ตัวอย่างโค้ดการควบคุมเสียงการกระโดด
using UnityEngine;
public class PlayerJumpSound : MonoBehaviour
{
public AudioSource jumpSound;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
jumpSound.Play(); // เล่นเสียงเมื่อผู้เล่นกดปุ่ม Space กระโดด
}
}
}
คำอธิบายโค้ด
- ในโค้ดนี้ เมื่อผู้เล่นกดปุ่ม Space ระบบจะเล่นเสียงกระโดดที่กำหนดไว้ใน Audio Source
การควบคุมระดับเสียง (Volume Control)
การควบคุมระดับเสียงเป็นสิ่งสำคัญที่ช่วยให้ผู้เล่นสามารถปรับเสียงให้เหมาะสมกับสถานการณ์ต่าง ๆ เช่น การลดเสียงดนตรีพื้นหลังหรือเพิ่มเสียงเอฟเฟกต์ เราสามารถควบคุมระดับเสียงได้ทั้งผ่าน Audio Source และโค้ด C#
การควบคุมระดับเสียงผ่าน Audio Source
- ไปที่วัตถุที่มี Audio Source และปรับระดับเสียงในฟิลด์ Volume ใน Inspector
- หากต้องการควบคุมเสียงผ่านโค้ด สามารถใช้คำสั่ง audioSource.volume
ตัวอย่างโค้ดการควบคุมระดับเสียงผ่าน UI Slider
using UnityEngine;
using UnityEngine.UI;
public class VolumeControl : MonoBehaviour
{
public AudioSource backgroundMusic;
public Slider volumeSlider;
void Start()
{
volumeSlider.onValueChanged.AddListener(SetVolume); // เรียกฟังก์ชัน SetVolume เมื่อผู้เล่นเลื่อน Slider
}
void SetVolume(float volume)
{
backgroundMusic.volume = volume; // ปรับระดับเสียงตามค่าของ Slider
}
}
คำอธิบายโค้ด
- Slider ใน UI จะใช้ในการปรับระดับเสียง เมื่อผู้เล่นเลื่อน Slider ระบบจะปรับระดับเสียงของดนตรีพื้นหลังโดยอัตโนมัติ
การเปลี่ยนแปลงเสียงตามสภาพแวดล้อม (Environmental Sound Effects)
การสร้างเสียงที่เปลี่ยนแปลงตามสภาพแวดล้อมในเกม เช่น เสียงที่ลดลงเมื่อผู้เล่นเข้าไปในถ้ำ หรือเสียงที่เปลี่ยนไปเมื่ออยู่ใกล้หรือไกลจากแหล่งกำเนิดเสียง สามารถทำได้โดยการปรับระดับเสียงตามตำแหน่งของผู้เล่นและวัตถุในฉาก
ตัวอย่างโค้ดการปรับเสียงตามระยะห่าง
using UnityEngine;
public class DynamicSound : MonoBehaviour
{
public AudioSource environmentalSound;
public Transform player;
public Transform soundSource;
void Update()
{
float distance = Vector3.Distance(player.position, soundSource.position);
environmentalSound.volume = 1 / distance; // ปรับระดับเสียงตามระยะห่างจากแหล่งกำเนิดเสียง
}
}
คำอธิบายโค้ด
- ในโค้ดนี้ ระบบจะปรับระดับเสียงตามระยะห่างระหว่างผู้เล่นและแหล่งกำเนิดเสียง ยิ่งอยู่ใกล้เสียงยิ่งดัง ยิ่งอยู่ไกลเสียงจะเบาลง
การเล่นเสียงเอฟเฟกต์เมื่อมีเหตุการณ์ในเกม
เราสามารถเล่นเสียงเอฟเฟกต์เฉพาะเมื่อเกิดเหตุการณ์บางอย่างในเกม เช่น เมื่อผู้เล่นเก็บไอเท็ม, โจมตีศัตรู, หรือเมื่อมีการชนกันของวัตถุ การจัดการเสียงตามเหตุการณ์ช่วยเพิ่มความสมจริงและความตื่นเต้นในการเล่นเกม
ตัวอย่างโค้ดการเล่นเสียงเมื่อผู้เล่นเก็บไอเท็ม
using UnityEngine;
public class ItemCollector : MonoBehaviour
{
public AudioSource collectSound;
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Item")
{
collectSound.Play(); // เล่นเสียงเมื่อผู้เล่นเก็บไอเท็ม
Destroy(other.gameObject); // ทำลายไอเท็มหลังจากเก็บได้
}
}
}
คำอธิบายโค้ด
- เมื่อผู้เล่นเก็บไอเท็ม ระบบจะเล่นเสียงที่กำหนดไว้ใน Audio Source และทำลายไอเท็มที่เก็บได้
การจัดการเสียงที่ซับซ้อนด้วย Audio Mixer
Audio Mixer เป็นเครื่องมือใน Unity ที่ช่วยให้เราสามารถจัดการเสียงหลาย ๆ ชนิดในเกมได้อย่างมีประสิทธิภาพ เช่น การจัดกลุ่มเสียงต่าง ๆ แล้วควบคุมระดับเสียงของแต่ละกลุ่มพร้อมกัน
ขั้นตอนการใช้ Audio Mixer
- ไปที่ Assets > คลิกขวา > Create > Audio Mixer เพื่อสร้าง Audio Mixer ใหม่
- เปิด Audio Mixer Window และสร้างกลุ่มเสียงต่าง ๆ เช่น Music และ SFX (เสียงเอฟเฟกต์)
- นำ Audio Source ที่ต้องการควบคุมไปเชื่อมต่อกับกลุ่มเสียงที่สร้างไว้ใน Audio Mixer
ตัวอย่างโค้ดการใช้ Audio Mixer เพื่อควบคุมระดับเสียง
using UnityEngine;
using UnityEngine.Audio;
public class MixerControl : MonoBehaviour
{
public AudioMixer audioMixer;
public void SetMusicVolume(float volume)
{
audioMixer.SetFloat("MusicVolume", volume); // ปรับระดับเสียงของดนตรี
}
public void SetSFXVolume(float volume)
{
audioMixer.SetFloat("SFXVolume", volume); // ปรับระดับเสียงของเอฟเฟกต์
}
}
คำอธิบายโค้ด
- ในโค้ดนี้ เราสามารถควบคุมระดับเสียงดนตรีและเสียงเอฟเฟกต์โดยการปรับค่า MusicVolume และ SFXVolume ใน Audio Mixer
บทที่ 8 นี้ช่วยให้นักเรียนได้เรียนรู้วิธีการจัดการระบบเสียงในเกม Unity ตั้งแต่การเพิ่มเสียง การควบคุมเสียงผ่านโค้ด และการสร้างเสียงที่ตอบสนองต่อสภาพแวดล้อม การจัดการเสียงที่ดีจะช่วยเพิ่มบรรยากาศและประสบการณ์การเล่นเกมให้ดียิ่งขึ้น