บทที่ 8: การเพิ่มเสียงและการควบคุมเสียงในเกม

เสียงเป็นองค์ประกอบที่สำคัญอย่างมากในการสร้างบรรยากาศและอารมณ์ให้กับเกม การจัดการเสียงที่ดีจะทำให้เกมดูสมจริงและน่าตื่นเต้นมากขึ้น Unity มีระบบเสียงที่ช่วยให้ผู้พัฒนาเกมสามารถเพิ่ม เอฟเฟกต์เสียง (Sound Effects), ดนตรีประกอบ (Background Music), และการควบคุมเสียงต่าง ๆ อย่างละเอียด การจัดการเสียงในเกมประกอบด้วยการเพิ่มเสียงในแต่ละฉาก การควบคุมระดับเสียง (Volume) และการสร้างระบบเสียงที่เปลี่ยนแปลงตามสภาพแวดล้อมหรือเหตุการณ์ในเกม

ในบทนี้ เราจะเรียนรู้วิธีการเพิ่มเสียงในเกม, การควบคุมเสียงในสถานการณ์ต่าง ๆ, และการเขียนโค้ดเพื่อจัดการระบบเสียงให้ทำงานได้อย่างมีประสิทธิภาพมากขึ้น


การเพิ่มเสียงพื้นฐานในเกม

Unity มีคอมโพเนนต์ที่ชื่อว่า Audio Source ซึ่งใช้ในการเล่นเสียงในเกม โดยสามารถใช้เล่นดนตรีประกอบ หรือเสียงเอฟเฟกต์ เช่น เสียงกระโดดหรือเสียงชน

ขั้นตอนการเพิ่มเสียงพื้นฐานใน Unity

  1. นำเข้าไฟล์เสียงที่ต้องการใช้ในเกม โดยไปที่ Assets > คลิกขวา > Import New Asset แล้วเลือกไฟล์เสียงที่ต้องการ
  2. เพิ่มคอมโพเนนต์ Audio Source ให้กับวัตถุในเกม โดยเลือกวัตถุใน Hierarchy และไปที่ Inspector > Add Component > พิมพ์ค้นหา Audio Source
  3. ใน Audio Source สามารถเลือกไฟล์เสียงที่นำเข้ามาในฟิลด์ Audio Clip
  4. หากต้องการให้เสียงเล่นอย่างต่อเนื่อง สามารถเลือกตัวเลือก 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

  1. ไปที่วัตถุที่มี Audio Source และปรับระดับเสียงในฟิลด์ Volume ใน Inspector
  2. หากต้องการควบคุมเสียงผ่านโค้ด สามารถใช้คำสั่ง 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

  1. ไปที่ Assets > คลิกขวา > Create > Audio Mixer เพื่อสร้าง Audio Mixer ใหม่
  2. เปิด Audio Mixer Window และสร้างกลุ่มเสียงต่าง ๆ เช่น Music และ SFX (เสียงเอฟเฟกต์)
  3. นำ 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 ตั้งแต่การเพิ่มเสียง การควบคุมเสียงผ่านโค้ด และการสร้างเสียงที่ตอบสนองต่อสภาพแวดล้อม การจัดการเสียงที่ดีจะช่วยเพิ่มบรรยากาศและประสบการณ์การเล่นเกมให้ดียิ่งขึ้น


Free Joomla templates by Ltheme