Unity坦克大战开发全流程——开始场景——音效数据逻辑

开始场景——音效数据逻辑

从这里开始到后面的三小节我们都将干一件很重要的事——数据存储,只有实现了数据存储才能在再次进入游戏时保持游戏数据不被丢失。

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第1张图片

类图分析:数据管理类是一个大类,它其中关联了两个类(这两个类都是数据结构类,只存在字段):一个是音效数据类;另一个是排行榜数据类。其中的排行榜数据类又由排行榜单条数据类聚合而成,而数据管理类又会提供一系列函数给外部进行数据存储。

音效数据类

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第2张图片

数据管理类

单例模式

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第3张图片

初始化音效数据

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第4张图片

当第一次进入游戏时对音效的初始化

先在MusicData脚本中加一个字段以判断是否是第一次加载数据

然后再在数据管理类中进行判断,如果是第一次,那就直接手动进行初始化。

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第5张图片

每一次打开音乐设置面板,就要将其数据进行一次更新,在SettingPanel脚本中编写此逻辑。

更新数据的函数

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第6张图片

重写虚函数

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第7张图片

数据管理类中的成员方法

1.开关背景音乐

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第8张图片

2.开关音效

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第9张图片

3.改变背景音乐的大小

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第10张图片

4.改变背景音效的大小

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第11张图片

在SettingPanel中添加事件

Unity坦克大战开发全流程——开始场景——音效数据逻辑_第12张图片

 

直到当前MusicData、GameDataMgr、SettingPanel的代码如下

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

public class MusicData 
{
    //是否开启背景音乐
    public bool isOpenBK;
    //是否开启音效
    public bool isOpenSound;
    //音乐大小
    public float bkValue;
    //音效大小
    public float soundValue;

    //是否是第一次进入游戏
    public bool notFirst;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameDataMgr 
{
    private static GameDataMgr instance = new GameDataMgr();
    public static GameDataMgr Instance
    {
        get { return instance; }
    }

    public MusicData musicData;
    

    private GameDataMgr()
    {
        //初始化数据
        musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData;
        rankData = PlayerPrefsDataMgr.Instance.LoadData(typeof(RankList), "Music") as RankList;

        //判断是否是第一次进入游戏,如果是第一次,那么就通过代码来手动初始化数据
        if (!musicData.notFirst)
        {
            musicData.notFirst = true;
            musicData.isOpenBK = true;
            musicData.isOpenSound = true;
            musicData.bkValue = 1;
            musicData.soundValue = 1;

            //储存数据
            PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
        }
    }

    //以下是提供给外部用于注册事件的函数

    //开关背景音乐
    public void OpenOrCloseBKMisic(bool isOpen)
    {
        musicData.isOpenBK = isOpen;
        BKMusic.Instance.ChangeOpen(isOpen);
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");        
    }

    //开关音效
    public void OpenOrCloseSound(bool isOpen)
    {
        musicData.isOpenSound = isOpen;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //改变背景音乐的大小
    public void ChangeBKValue(float value)
    {
        musicData.bkValue = value;
        BKMusic.Instance.ChangeValue(value);
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //改变背景音效的大小
    public void ChangeSoundValue(float value)
    {
        musicData.soundValue = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

 

 

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

public class SettingPanel : BasePanel
{
    //关联的各按钮控件
    public CustomGUISlider sliderMusic;
    public CustomGUISlider sliderSound;

    public CustomGUIToggle toggleMusic;
    public CustomGUIToggle toggleSound;

    public CustomGUIButton btnExit;

    void Start()
    {
        //事件监听
        sliderMusic.changeValue += (value) => GameDataMgr.Instance.ChangeBKValue(value);
        
        sliderSound.changeValue += (value) => GameDataMgr.Instance.ChangeSoundValue(value);

        toggleMusic.changeValue += (value) => GameDataMgr.Instance.OpenOrCloseBKMisic(value);

        toggleSound.changeValue += (value) => GameDataMgr.Instance.OpenOrCloseSound(value);
        
        btnExit.clickEvent += () =>
        {
            HideMe();
            
            if (SceneManager.GetActiveScene().name == "BeginScene")
            {
                BeginPanle.Instance.ShowMe();
            }
        };

        HideMe();
    }

    //数据更新函数
    public void UpdatePanelInfo()
    {
        //获得musicData这个变量的信息
        MusicData data = GameDataMgr.Instance.musicData;

        //对自己的变量进行赋值
        sliderMusic.nowValue = data.bkValue;
        sliderSound.nowValue = data.soundValue;
        toggleMusic.isSel = data.isOpenBK;
        toggleSound.isSel = data.isOpenSound;

    }

    //重写虚函数
    public override void ShowMe()
    {
        base.ShowMe();
        //在每次显示面板时就要更新数据
        UpdatePanelInfo();
    }

    
}

 

 

你可能感兴趣的:(unity,游戏引擎)