เตรียมไฟล์เสียง
ผู้เรียนสามารถหาไฟล์เสียงตามที่ต้องการได้ตามเว็บฟรีต่างๆ เช่น
ในตัวอย่างโปรเจ็คนี้จะผู้เขียนจะดาวน์โหลดเสียงทั้งหมดมาจากเว็บไซต์ http://www.freesfx.co.uk/ โดยจะต้องทำการสมัครสมาชิก และล็อกอินก่อนจากนั้นจึงจะสามารถดาวน์โหลดได้
โดยในเกมจะมีเสียงหลักๆ ดังนี้
หลังจากนั้นให้สร้างโฟลเดอร์ชื่อ Sounds เพื่อใช้สำหรับจัดระเบียบไฟล์เสียง และนำไฟล์เสียงที่ดาวน์โหลดมาทั้งหมดจัดเก็บไว้ในโฟลเดอร์นี้
ใส่เสียงดนตรี
สร้างเกมออบเจ็คใหม่ขึ้นมา โดยคลิกขวาเลือก Create Empty ในที่นี้ตั้งชื่อว่า SoundManager
จากนั้นทำการเพิ่ม Component Audio Source ให้กับเกมออบเจ็คที่เราเพิ่งจะสร้างขึ้น โดยการคลิกที่ Add Component -> Audio -> Audio Source
ใส่เสียงดนตรีให้กับ Audio Source โดยใช้เสียง psyche_up หรือจะเป็นเสียงดนตรีที่ผู้อ่านหามาเองก็ได้
จากนั้นลองทดสอบโดยการรันเกมจะเห็นว่าเกมมีเสียงดนตรีเรียบร้อยแล้ว
จัดการเสียงเอฟเฟค
สร้าง C# Script ขึ้นมาใหม่ ในที่นี้จะตั้งชื่อว่า SoundManager จากนั้นให้เพิ่ม Script SoundManager ให้กับเกมออบเจ็ค SoundManager ดังภาพ
กลับมาที่ Script SoundManager ให้สร้าง Array ของ AudioClip ขึ้นมาเพื่อใช้อ้างอิงกับเสียงเอฟเฟคทั้งหมดที่ใช้ภายในเกม ดังนี้
public class SoundManager : MonoBehaviour
{
public AudioClip[] _Sounds;
}
จากนั้นให้กลับไปที่ Scene Game ที่ Script SoundManager จะเห็นว่ามีค่า Sounds เกิดขึ้น ดังภาพ
ให้ใส่ตัวเลข 3 เข้าไป เนื่องจากเสียงเอฟเฟคเรามีทั้งหมด 3 เสียง ได้แก่ เสียงชน บินขึ้น และคลิกปุ่ม
จากนั้นจะเห็นว่ามี Element Audio Clip ขึ้นมา 3 ตัว ให้เราเพิ่มไฟล์เสียงเอฟเฟคเข้าไป ดังนี้
กลับไปที่ Script SoundManager ให้เพิ่มฟังก์ชั่น PlayAudioClip สำหรับการเล่นเสียงเอฟเฟค ดังนี้
private void PlayAudioClip(int index)
{
GameObject go = new GameObject("AudioClip"); //สร้างเกมออบเจ็คใหม่ โดยตั้งชื่อว่า AudioClip
MonoBehaviour.DontDestroyOnLoad(go); //เมื่อมีการโหลดซีนใหม่เกมออบเจ็คจะไม่ถูกทำลาย
AudioSource source = go.AddComponent<AudioSource>(); //เพิ่ม Component AudioSource ให้กับเกมออบเจ็ค
source.clip = _Sounds[index]; //เพิ่ม Clip เสียงโดยอ้างอิงจาก index
source.Play(); //สั่งเล่นไฟล์เสียง
MonoBehaviour.Destroy(go, _Sounds[index].length); //ทำลายเกมออบเจ็คเมื่อเล่นไฟล์เสียงจบ
}
จากนั้นสร้างฟังก์ชั่นสำหรับการเล่นเสียงเอฟเฟคประเภทต่างๆโดยอ้างอิงจาก index ดังนี้
public void PlaySoundCrash()
{
PlayAudioClip(0);
}
public void PlaySoundUp()
{
PlayAudioClip(1);
}
public void PlaySoundClick()
{
PlayAudioClip(2);
}
ใส่เสียงชน
กลับไปที่ PlaneMovement Script เพิ่ม code ดังนี้
public GameObject _SoundManager;
เพื่อใช้สำหรับอ้างอิงกับออบเจ็ค SoundManager
จากนั้นที่ Scene Game เลือกที่เกมออบเจ็ค Plane ที่ Component Plane Movement ให้ใส่เกมออบเจ็ค SoundManager ลงไป
กลับไปที่ PlaneMovement Script อีกครั้ง ที่ฟังก์ชั่น OnCollisionEnter2D เพิ่ม code เพิ่มเติมดังนี้
if (!_IsDead) _SoundManager.GetComponent<SoundManager>().PlaySoundCrash();
public void OnCollisionEnter2D(Collision2D collision)
{
if (!_IsDead) _SoundManager.GetComponent<SoundManager>().PlaySoundCrash();
_IsDead = true;
GetComponent<Animator>().SetBool("IsDead", true);
_CanvasGameOver.gameObject.SetActive(true);
}
รันและทดสอบเสียงชน
ใส่เสียงบินขึ้น
ที่ PlaneMovement Script ฟังก์ชั่น Update
ให้ใส่โค้ด _SoundManager.GetComponent<SoundManager>().PlaySoundUp(); เมื่อผู้เล่นคลิกหรือแตะหน้าจอ
private void Update()
{
if (_IsDead) return;
if (_IsStart)
{
Vector3 pos = new Vector3(_Speed, 0, 0);
transform.position += pos;
}
if (Input.GetMouseButtonDown(0))
{
_SoundManager.GetComponent<SoundManager>().PlaySoundUp(); //เล่นเสียงเมื่อบินขึ้น
if (!_IsStart)
{
_CanvasGameStart.gameObject.SetActive(false);
GetComponent<Rigidbody2D>().isKinematic = false;
_IsStart = true;
}
else
{
GetComponent<Rigidbody2D>().AddForce(Vector2.up * _TabSpeed);
}
}
}
รันและทดสอบเกม
ใส่เสียงคลิกปุ่ม
ไปที่ UI Script เพิ่มโค้ด ดังนี้
public GameObject _SoundManager;
เพื่อใช้อ้างอิงกับเกมออบเจ็ค SoundManager
ที่ Scene Game คลิกที่เกมออบเจ็ค CanvasGameOver ที่ Script UI Component ให้เพิ่มเกมออบเจ็ค SoundManager เข้าไป
จากนั้นที่ฟังก์ชั่น Retry ให้เพิ่มโค้ดการเล่นเสียงคลิกปุ่ม ดังนี้
public void Retry()
{
_SoundManager.GetComponent<SoundManager>().PlaySoundClick();
Application.LoadLevel("Game");
}
รันและทดสอบเกม
เพียงเท่านี้เราก็ได้เกม Tappy Plane ที่เสร็จสมบูรณ์แล้ว ขอให้สนุกกับการทำเกมนะคะ