面向对象思想在UnityUI控制背景音乐音效大小开关中的运用

几乎所有游戏的设置面板都会有控制音效BGM背景音乐Music的开启或关闭,音量大小调整的选项.那么我们如何用最简单最直接快捷的面向对象思想来实现这个功能呢?接下来就为大家说明.

AudioSource部分

1.首先创建一个空物体,添加AudioSource组件,把你想播放的Audio拖上去

(我这里颜色有点怪,不过无伤大雅)

 

 面向对象思想在UnityUI控制背景音乐音效大小开关中的运用_第1张图片

 面向对象思想在UnityUI控制背景音乐音效大小开关中的运用_第2张图片

 2.再在空物体上新建一个脚本,用于管理音频

面向对象思想在UnityUI控制背景音乐音效大小开关中的运用_第3张图片

这个脚本里定义自身的AudioSource,还有向外公开改变音量大小和开启关闭的方法

public class BKMusic : MonoBehaviour
{
    private static BKMusic instance;
    public static BKMusic Instance => instance;

    //背景音乐的引用
    private AudioSource bkMusic;
    

    private void Awake()
    {
        //实例化
        instance = this;
        bkMusic = this.GetComponent();
    }

    //开启和关闭的方法
    public void MusicSwitch(bool isOpen)
    {
        if (isOpen)
            bkMusic.Play();
        else
            bkMusic.Pause();
    }

    //改变音量大小的方法
    public void ChangeVolume(float value)
    {
        bkMusic.volume = value;
    }
}

UGUI部分

1.使用UGUI搭建一个这样的设置界面

面向对象思想在UnityUI控制背景音乐音效大小开关中的运用_第4张图片

提示:

面向对象思想在UnityUI控制背景音乐音效大小开关中的运用_第5张图片  面向对象思想在UnityUI控制背景音乐音效大小开关中的运用_第6张图片

 2.然后在UGUI的Canvas上新建一个脚本用于获取Toggle和Slider改变的值

    //引用
    public Toggle toggle;
    public Slider slider;

    //上一次的值
    private bool last_toggle_value;
    private float last_slider_value;

    private void Start()
    {
        //初始化
        last_toggle_value = toggle.isOn;
        last_slider_value = slider.value;
    }

    private void Update()
    {
        //只有在改变值的情况下才运行
        if (toggle.isOn != last_toggle_value)
        {
            BKMusic.Instance.MusicSwitch(toggle.isOn);
            last_toggle_value = toggle.isOn;
        }
        if (slider.value != last_slider_value)
        {
            BKMusic.Instance.ChangeVolume(slider.value);
            last_slider_value = slider.value;
        }
    }

这样就能通过设置面板控制音乐音效的开启关闭/音量大小了!

你可能感兴趣的:(技术,Unity,unity,游戏引擎,单例模式,ui,c#)