开始场景——背景音乐
先在场景上创建一个名为“BKMusic”的空物体与其对应的脚本
单例模式
得到对应的音源控件
再在该脚本中编写能够控制音源的函数
并在数据管理类中调用该函数
然后还要在BKMusic脚本的Awake函数中进行背景音乐的初始化(根据上一次的数据进行设置,防止数据丢失)
直到当前BKMusic和GameDataMgr的代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BKMusic : MonoBehaviour
{
private static BKMusic instance;
public static BKMusic Instance
{
get { return instance; }
}
private AudioSource audioSource;
void Awake()
{
instance = this;
//得到该脚本依附的物体上的音源组件
audioSource = GetComponent<AudioSource>();
//第一次进游戏时,进行初始化
ChangeValue(GameDataMgr.Instance.musicData.bkValue);
ChangeOpen(GameDataMgr.Instance.musicData.isOpenBK);
}
/// <summary>
/// 控制音量大小
/// </summary>
/// <param name="value"></param>
public void ChangeValue(float value)
{
audioSource.volume = value;
}
/// <summary>
/// 控制音乐开关
/// </summary>
/// <param name="isOpen"></param>
public void ChangeOpen(bool isOpen)
{
audioSource.mute = !isOpen;
}
}
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;
public RankList rankData;
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");
}
//添加排行榜信息
public void AddRankInfo(string name, int score, int time)
{
rankData.list.Add(new RankInfo(name, score, time));
rankData.list.Sort((a, b) => a.time < b.time ? -1 : 1);
for (int i = rankData.list.Count - 1; i >= 3; i--)
{
rankData.list.RemoveAt(i);
}
PlayerPrefsDataMgr.Instance.SaveData(rankData, "Rank");
}
}