Unity之C#——用单例实现一个游戏内部的音效控制器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lijianfex/article/details/78493803

       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);
        }
        
    }

}



猜你喜欢

转载自blog.csdn.net/lijianfex/article/details/78493803