1. 程式人生 > >Unity之C#——用單例實現一個遊戲內部的音效控制器

Unity之C#——用單例實現一個遊戲內部的音效控制器

       Unity之C#--用單例實現一個遊戲內部的音效控制器

        在遊戲開發中,音效是很重要的一環,沒有音效的遊戲就沒有靈魂,所以實現聲音控制是很有必要的,同時,音效可能還會因玩家的性別不同,分為男女聲。我用單例寫了個簡單的聲音控制器,並且從Resources中動態讀取聲音,在場景中加了一個空物體命名為GamePlayAudio,把聲音控制器指令碼掛載上面。遊戲需要播放聲音時通過單例呼叫播放聲音的方法即可。

程式碼如下:

SoundManeger.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 聲音管理器,單例模式
/// </summary>
public class SoundManeger : MonoBehaviour {
    private static SoundManeger _instance;

    public AudioSource source;

    private static GameObject gamePlayAudio;

    public static SoundManeger getInstance()
    {
        if(_instance==null)
        {
            GameObject temp = SoundManeger.gamePlayAudio;
            _instance = temp.GetComponentInChildren<SoundManeger>();
        }
        return _instance;
    }
    void Start()
    {
        source = this.GetComponent<AudioSource>();
        gamePlayAudio = this.gameObject;
    }
    void Update()
    {

    }

    /// <summary>
    /// 播放帶有性別區分的聲音的介面
    /// </summary>
    /// <param name="str">聲音編號</param>
    /// <param name="sex">男:1,女:0</param>
    public void PlaySound(string str,int sex)
    {
        if(GlobalDataScript.soundToggle)
        {
            if (sex==1)
            {
                AudioClip clip = (AudioClip)Resources.Load("AudioClip/"+str+"boy", typeof(AudioClip));
                source.PlayOneShot(clip,GlobalDataScript.volume);
            }
            else
            {
                AudioClip clip = (AudioClip)Resources.Load("AudioClip/"+str +"girl", typeof(AudioClip));
                source.PlayOneShot(clip,GlobalDataScript.volume);
            }
        }
        return;
    }
    /// <summary>
    /// 播放其他的聲音介面
    /// </summary>
    /// <param name="str">聲音的名字</param>
    public void PlaySound(string str)
    {
        if (GlobalDataScript.soundToggle)
        {
            AudioClip clip = (AudioClip)Resources.Load("AudioClip/" + str, typeof(AudioClip));
            source.PlayOneShot(clip, GlobalDataScript.volume);
        }
        
    }

}