5.开始场景-设置界面-音效数据
5.1 知识点
分析项目中音效数据和整体数据的逻辑。应该创建一个音效数据类和游戏数据管理器类。
创建音效数据类MusicData脚本,里面有要保存的两个拖动条和两个多选框的数据。
/// <summary>
/// 音效音乐相关数据结构类
/// </summary>
public class MusicData
{
//背景音乐大小 0~1
public float musicValue = 0.5f;
//背景音乐开关
public bool musicIsOpen = true;
//音效大小 0~1
public float soundValue = 0.5f;
//音效开关
public bool SoundIsOpen = true;
}
创建游戏数据管理器GameDataMgr脚本。做成单例。关联一个音乐数据类的变量。私有构造函数初始化的时候用xml管理器读取存储的音乐数据。封装一些和音乐数据相关暴露给外部方便外部使用的方法,包括存储音乐数据方法,设置音乐音效开关方法,设置音乐音效大小的方法。现在暂时只能先修改数据,添加音乐相关对象之后才能真正修改音乐音效相关。
//定义一个名为GameDataMgr的类,用于管理游戏数据
public class GameDataMgr
{
//定义一个静态字段instance,用于存储类的唯一实例
private static GameDataMgr instance = new GameDataMgr();
//定义一个静态属性Instance,用于获取类的唯一实例
public static GameDataMgr Instance => instance;
//定义一个公共字段musicData,用于存储音乐相关数据
public MusicData musicData;
//定义一个私有构造函数,用于在实例化时从本地硬盘中加载音乐数据
private GameDataMgr()
{
//获取本地硬盘中存储的 音乐数据
musicData = XmlDataMgr.Instance.LoadData(typeof(MusicData), "MusicData") as MusicData;
}
//定义一个公共方法SaveMusicData,用于保存音乐相关数据
public void SaveMusicData()
{
XmlDataMgr.Instance.SaveData(musicData, "MusicData");
}
//定义一个公共方法SetMusicIsOpen,用于开关背景音乐
public void SetMusicIsOpen(bool isOpen)
{
//改变musicIsOpen字段的值
musicData.musicIsOpen = isOpen;
//真正改变背景音乐的开关
}
//定义一个公共方法SetSoundIsOpen,用于开关音效
public void SetSoundIsOpen(bool isOpen)
{
//改变SoundIsOpen字段的值
musicData.SoundIsOpen = isOpen;
//真正改变音效的开关
}
//定义一个公共方法SetMusicValue,用于设置背景音乐的音量(0~1)
public void SetMusicValue(float value)
{
//改变musicValue字段的值
musicData.musicValue = value;
//真正的改变背景音乐的大小
}
//定义一个公共方法SetSoundValue,用于设置音效的音量(0~1)
public void SetSoundValue(float value)
{
//改变soundValue字段的值
musicData.soundValue = value;
}
}
有了数据管理器之后,我们可以去设置面板脚本,在两个拖动条和两个多选框的事件监听中调用游戏数据管理器脚本封装的暴露给外部的和音乐相关的方法。传入控件上的值来改变音乐音效的大小和开关。同时可以在设置界面重写的ShowMe和HideMe方法写逻辑。显示设置面板时读取数据管理器中存储的音乐数据中的数据赋值给设置面板的控件,隐藏设置面板时保存音乐数据。
//设置界面的InIt方法
//重写Init方法,用于初始化面板
public override void Init()
{
//为关闭按钮添加点击事件监听
btnClose.onClick.Add(new EventDelegate(() =>
{
//隐藏自己
HideMe();
}));
//为音乐滑块添加值改变事件监听
sliderMusic.onChange.Add(new EventDelegate(() =>
{
//改变背景音乐的音量,并更新数据
GameDataMgr.Instance.SetMusicValue(sliderMusic.value);
}));
//为音效滑块添加值改变事件监听
sliderSound.onChange.Add(new EventDelegate(() =>
{
//改变音效的音量,并更新数据
GameDataMgr.Instance.SetSoundValue(sliderSound.value);
}));
//为音乐开关添加值改变事件监听
togMusic.onChange.Add(new EventDelegate(() =>
{
//开关背景音乐,并更新数据
GameDataMgr.Instance.SetMusicIsOpen(togMusic.value);
}));
//为音效开关添加值改变事件监听
togSound.onChange.Add(new EventDelegate(() =>
{
//开关音效,并更新数据
GameDataMgr.Instance.SetSoundIsOpen(togSound.value);
}));
//初始化时隐藏自己
HideMe();
}
//设置界面的ShowMe方法
//重写ShowMe方法,用于显示面板
public override void ShowMe()
{
base.ShowMe();
//显示自己时 更新上面的内容
MusicData musicData = GameDataMgr.Instance.musicData;
togMusic.value = musicData.musicIsOpen;
togSound.value = musicData.SoundIsOpen;
sliderMusic.value = musicData.musicValue;
sliderSound.value = musicData.soundValue;
}
//设置界面的HideMe方法
//重写HideMe方法,用于隐藏面板
public override void HideMe()
{
base.HideMe();
//隐藏自己时 需要保存该次设置的数据
GameDataMgr.Instance.SaveMusicData();
}
5.2 知识点代码
MusicData
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 音效音乐相关数据结构类
/// </summary>
public class MusicData
{
//背景音乐大小 0~1
public float musicValue = 0.5f;
//背景音乐开关
public bool musicIsOpen = true;
//音效大小 0~1
public float soundValue = 0.5f;
//音效开关
public bool SoundIsOpen = true;
}
GameDataMgr
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//定义一个名为GameDataMgr的类,用于管理游戏数据
public class GameDataMgr
{
//定义一个静态字段instance,用于存储类的唯一实例
private static GameDataMgr instance = new GameDataMgr();
//定义一个静态属性Instance,用于获取类的唯一实例
public static GameDataMgr Instance => instance;
//定义一个公共字段musicData,用于存储音乐相关数据
public MusicData musicData;
//定义一个私有构造函数,用于在实例化时从本地硬盘中加载音乐数据
private GameDataMgr()
{
//获取本地硬盘中存储的 音乐数据
musicData = XmlDataMgr.Instance.LoadData(typeof(MusicData), "MusicData") as MusicData;
}
//定义一个公共方法SaveMusicData,用于保存音乐相关数据
public void SaveMusicData()
{
XmlDataMgr.Instance.SaveData(musicData, "MusicData");
}
//定义一个公共方法SetMusicIsOpen,用于开关背景音乐
public void SetMusicIsOpen(bool isOpen)
{
//改变musicIsOpen字段的值
musicData.musicIsOpen = isOpen;
//真正改变背景音乐的开关
}
//定义一个公共方法SetSoundIsOpen,用于开关音效
public void SetSoundIsOpen(bool isOpen)
{
//改变SoundIsOpen字段的值
musicData.SoundIsOpen = isOpen;
//真正改变音效的开关
}
//定义一个公共方法SetMusicValue,用于设置背景音乐的音量(0~1)
public void SetMusicValue(float value)
{
//改变musicValue字段的值
musicData.musicValue = value;
//真正的改变背景音乐的大小
}
//定义一个公共方法SetSoundValue,用于设置音效的音量(0~1)
public void SetSoundValue(float value)
{
//改变soundValue字段的值
musicData.soundValue = value;
}
}
SettingPanel
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//定义一个名为SettingPanel的类,继承自BasePanel<SettingPanel>
public class SettingPanel : BasePanel<SettingPanel>
{
//定义一个公共字段btnClose,用于存储关闭按钮的引用
public UIButton btnClose;
//定义一个公共字段sliderMusic,用于存储音乐滑块的引用
public UISlider sliderMusic;
//定义一个公共字段sliderSound,用于存储音效滑块的引用
public UISlider sliderSound;
//定义一个公共字段togMusic,用于存储音乐开关的引用
public UIToggle togMusic;
//定义一个公共字段togSound,用于存储音效开关的引用
public UIToggle togSound;
//设置界面的InIt方法
//重写Init方法,用于初始化面板
public override void Init()
{
//为关闭按钮添加点击事件监听
btnClose.onClick.Add(new EventDelegate(() =>
{
//隐藏自己
HideMe();
}));
//为音乐滑块添加值改变事件监听
sliderMusic.onChange.Add(new EventDelegate(() =>
{
//改变背景音乐的音量,并更新数据
GameDataMgr.Instance.SetMusicValue(sliderMusic.value);
}));
//为音效滑块添加值改变事件监听
sliderSound.onChange.Add(new EventDelegate(() =>
{
//改变音效的音量,并更新数据
GameDataMgr.Instance.SetSoundValue(sliderSound.value);
}));
//为音乐开关添加值改变事件监听
togMusic.onChange.Add(new EventDelegate(() =>
{
//开关背景音乐,并更新数据
GameDataMgr.Instance.SetMusicIsOpen(togMusic.value);
}));
//为音效开关添加值改变事件监听
togSound.onChange.Add(new EventDelegate(() =>
{
//开关音效,并更新数据
GameDataMgr.Instance.SetSoundIsOpen(togSound.value);
}));
//初始化时隐藏自己
HideMe();
}
//设置界面的ShowMe方法
//重写ShowMe方法,用于显示面板
public override void ShowMe()
{
base.ShowMe();
//显示自己时 更新上面的内容
MusicData musicData = GameDataMgr.Instance.musicData;
togMusic.value = musicData.musicIsOpen;
togSound.value = musicData.SoundIsOpen;
sliderMusic.value = musicData.musicValue;
sliderSound.value = musicData.soundValue;
}
//设置界面的HideMe方法
//重写HideMe方法,用于隐藏面板
public override void HideMe()
{
base.HideMe();
//隐藏自己时 需要保存该次设置的数据
GameDataMgr.Instance.SaveMusicData();
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com