6.开始场景-设置界面-背景音乐对象
6.1 知识点
创建背景音乐空物体对象。用来管理游戏中实际设置背景音乐相关。这个对象要添加音效源组件,拖拽资源中的背景音乐到音效源组件的clip中。并且创建一个背景音乐BKMusic脚本挂载上去。
创建背景音乐BKMusic脚本中搞成单例。定义一个音乐源组件变量在Awake的时候GetComponent获取对象上的音乐源组件。封装两个暴露给外部的方法,通过设置音乐源时候静音和音乐源音量的大小真正控制背景音乐的开关和音量大小。在Awake的时候设置一次,设置的数据是数据管理器中音乐数据中的数据。
//定义一个名为BKMusic的类,继承自MonoBehaviour
public class BKMusic : MonoBehaviour
{
//定义一个静态字段instance,用于存储类的唯一实例
private static BKMusic instance;
//定义一个静态属性Instance,用于获取类的唯一实例
public static BKMusic Instance => instance;
//定义一个私有字段bkAudio,用于存储背景音乐的音频源组件
private AudioSource bkAudio;
//重写Awake方法,用于在对象被唤醒时初始化
void Awake()
{
//初始化instance字段
instance = this;
//得到依附在同一个对象上的 音效组件
bkAudio = this.GetComponent<AudioSource>();
//第一次初始化 当前是否播放 音量大小是多少
SetBKMusicIsOpen(GameDataMgr.Instance.musicData.musicIsOpen);
SetBKMusicValue(GameDataMgr.Instance.musicData.musicValue);
}
/// <summary>
/// 开关 背景音乐的函数
/// </summary>
/// <param name="isOpen">是否开启</param>
public void SetBKMusicIsOpen(bool isOpen)
{
//设置bkAudio组件的mute属性,控制是否静音
bkAudio.mute = !isOpen;
}
/// <summary>
/// 设置背景音乐的 大小
/// </summary>
/// <param name="value">音量大小(0~1)</param>
public void SetBKMusicValue(float value)
{
//设置bkAudio组件的volume属性,控制音量大小
bkAudio.volume = value;
}
}
在设置面板中是通过调用数据管理器封装的改变音乐开关和大小的方法来设置音乐的开关和大小的。之前数据管理器由于没有实际的音乐类,所以设置音乐开关和大小的方法是待补充的。现在有了真正控制音乐的背景音乐类,可以在数据管理器改变音乐开关和大小的方法调用设置音乐源时候静音和音乐源音量的大小的方法真正的设置游戏中的背景音乐。音效的开关和大小可能要到实际播音效的时候设置。
//游戏数据类内,定义一个公共方法SetMusicIsOpen,用于开关背景音乐
public void SetMusicIsOpen(bool isOpen)
{
//改变musicIsOpen字段的值
musicData.musicIsOpen = isOpen;
//真正改变背景音乐的开关
BKMusic.Instance.SetBKMusicIsOpen(isOpen);
}
//游戏数据类内,定义一个公共方法SetMusicValue,用于设置背景音乐的音量(0~1)
public void SetMusicValue(float value)
{
//改变musicValue字段的值
musicData.musicValue = value;
//真正的改变背景音乐的大小
BKMusic.Instance.SetBKMusicValue(value);
}
6.2 知识点代码
BKMusic
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//定义一个名为BKMusic的类,继承自MonoBehaviour
public class BKMusic : MonoBehaviour
{
//定义一个静态字段instance,用于存储类的唯一实例
private static BKMusic instance;
//定义一个静态属性Instance,用于获取类的唯一实例
public static BKMusic Instance => instance;
//定义一个私有字段bkAudio,用于存储背景音乐的音频源组件
private AudioSource bkAudio;
//重写Awake方法,用于在对象被唤醒时初始化
void Awake()
{
//初始化instance字段
instance = this;
//得到依附在同一个对象上的 音效组件
bkAudio = this.GetComponent<AudioSource>();
//第一次初始化 当前是否播放 音量大小是多少
SetBKMusicIsOpen(GameDataMgr.Instance.musicData.musicIsOpen);
SetBKMusicValue(GameDataMgr.Instance.musicData.musicValue);
}
/// <summary>
/// 开关 背景音乐的函数
/// </summary>
/// <param name="isOpen">是否开启</param>
public void SetBKMusicIsOpen(bool isOpen)
{
//设置bkAudio组件的mute属性,控制是否静音
bkAudio.mute = !isOpen;
}
/// <summary>
/// 设置背景音乐的 大小
/// </summary>
/// <param name="value">音量大小(0~1)</param>
public void SetBKMusicValue(float value)
{
//设置bkAudio组件的volume属性,控制音量大小
bkAudio.volume = value;
}
}
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;
//真正改变背景音乐的开关
BKMusic.Instance.SetBKMusicIsOpen(isOpen);
}
//定义一个公共方法SetSoundIsOpen,用于开关音效
public void SetSoundIsOpen(bool isOpen)
{
//改变SoundIsOpen字段的值
musicData.SoundIsOpen = isOpen;
//真正改变音效的开关
}
//游戏数据类内,定义一个公共方法SetMusicValue,用于设置背景音乐的音量(0~1)
public void SetMusicValue(float value)
{
//改变musicValue字段的值
musicData.musicValue = value;
//真正的改变背景音乐的大小
BKMusic.Instance.SetBKMusicValue(value);
}
//定义一个公共方法SetSoundValue,用于设置音效的音量(0~1)
public void SetSoundValue(float value)
{
//改变soundValue字段的值
musicData.soundValue = value;
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com