วันจันทร์ที่ 9 พฤศจิกายน พ.ศ. 2558

Unity Engine & Tools

Game Engine & Tools

- Unity
- Visual Studio หรือ MonoDevelop
Visual Studio
MonoDevelop
- SVN

Unity Game Engine

ทำไมต้อง Unity

- Free Download

- สามารถ Publish เกมหรือ Application ที่สร้างขึ้นจาก Unity Free Version ได้ ในกรณีที่รายได้ต่อปีไม่ถึง US$100,000

- Multiplatform
- มีการใช้งานอย่างกว้างขวาง
ที่มา : https://www.facebook.com/GlobalGameJam/

ตัวอย่างเกมที่ใช้ Unity

สลาฟในแดนมหัศจรรย์
Blogic
หมากฮอสขั้นเทพ
เมื่อวันที่ 6 พฤจิกายน 2558 เกมหมากฮอสขั้นเทพได้ขึ้นเป็นอันดับ 1 เกมปริศนายอดนิยม

Unity Plugin

Facebook SDK

- Login
- App Invites
- Share
- App Links

iTween


Unity Objects and Component

ที่มา :  http://www.rivellomultimediaconsulting.com/wp-content/uploads/2013/05/unity14_diagram-500x243.png

วันอังคารที่ 3 พฤศจิกายน พ.ศ. 2558

[Unity 2D] สร้างเกมง่ายๆ Tappy Plane ตอนที่ 16 : ใส่เสียงให้เกม [จบ]

เตรียมไฟล์เสียง

ผู้เรียนสามารถหาไฟล์เสียงตามที่ต้องการได้ตามเว็บฟรีต่างๆ เช่น

ในตัวอย่างโปรเจ็คนี้จะผู้เขียนจะดาวน์โหลดเสียงทั้งหมดมาจากเว็บไซต์ 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 ที่เสร็จสมบูรณ์แล้ว ขอให้สนุกกับการทำเกมนะคะ