1、开始场景
1、场景装饰
RotateObj
using UnityEngine;
public class RotateObj : MonoBehaviour
{
public float rotateSpeed = 15;
void Update()
{
transform.Rotate(Vector3.up, rotateSpeed * Time.deltaTime);
}
}
2、开始界面
BasePanel
using UnityEngine;
public class BasePanel<T> : MonoBehaviour where T:class
{
//两个关键的静态成员
//私有的静态成员变量(声明) 基础Mono不能new
private static T instance;
//公共的静态成员属性或方法(获取)
//public static T Instance
//{
// get
// {
// return instance;
// }
//}
public static T Instance => instance;
//instance赋值,为确保挂载的唯一性,自己定义一个规范
private void Awake()
{
instance = this as T;
}
public virtual void ShowMe()
{
this.gameObject.SetActive(true);
}
public virtual void HideMe()
{
this.gameObject.SetActive(false);
}
}
BeginPanel
using UnityEngine;
using UnityEngine.SceneManagement;
/// <summary>
/// 通过类名快速得到脚本
/// </summary>
public class BeginPanel : BasePanel<BeginPanel>
{
// 声明公共的成员变量来关联各个控件
public CustomGUIButton btnBegin;
public CustomGUIButton btnSetting;
public CustomGUIButton btnQuit;
public CustomGUIButton btnRank;
void Start()
{
//锁定鼠标在窗口内
//Cursor.lockState = CursorLockMode.Confined;
//监听一次按钮点击过后的内容
btnBegin.clickEvent += () =>
{
SceneManager.LoadScene("GameScene");
};
btnSetting.clickEvent += () =>
{
SettingPanel.Instance.ShowMe();
HideMe();
};
btnQuit.clickEvent += () =>
{
Application.Quit();
};
btnRank.clickEvent += () =>
{
RankPanel.Instance.ShowMe();
Instance.HideMe();
};
}
}
3、设置界面
GameDataMgr
/// <summary>
/// 游戏数据管理类,是一个单例模式对象
/// </summary>
public class GameDataMgr
{
private static GameDataMgr instance = new GameDataMgr();
public static GameDataMgr Instance {
get => instance; }
//设置信息对象
public MusicData musicData;
//排行榜数据对象
public RankList rankData;
private GameDataMgr()
{
//初始化游戏数据
musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music_Key") as MusicData;
//第一次进入游戏的默认值
if (!musicData.notFirst)
{
musicData.notFirst = true;
musicData.isOpenBK = true;
musicData.isOpenSound = true;
musicData.bkValue = 1;
musicData.soundValue = 1;
PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music_Key");
}
//初始化读取排行榜数据
rankData = PlayerPrefsDataMgr.Instance.LoadData(typeof(RankList),"Rank_key") as RankList;
}
//提供一个添加数据到排行榜中的方法
public void AddRankInfo(string name,int score,float time)
{
rankData.list.Add(new RankInfo(name,score,time));
//排序
rankData.list.Sort((a, b) => a.time < b.time ? -1 : 1);
//移除第10条之后的数据
for (int i = rankData.list.Count-1; i >= 10; i--)
{
rankData.list.RemoveAt(i);
}
//存储
PlayerPrefsDataMgr.Instance.SaveData(rankData, "Rank_key");
}
public void OpenOrCloseBKMusic(bool isOpen)
{
musicData.isOpenBK = isOpen; //改变是否开启状态
//控制开关
BKMusic.Instance.ChangeOpen(isOpen);
PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music_Key"); //存储
}
public void OpenOrCloseSound(bool isOpen)
{
musicData.isOpenSound = isOpen; //改变
PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music_Key"); //存储
}
public void ChangeBKValue(float value)
{
musicData.bkValue = value;
BKMusic.Instance.ChangeValue(value);
PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music_Key");
}
public void ChangeSoundValue(float value)
{
musicData.soundValue = value;
PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music_Key");
}
}
SettingPanel
using UnityEngine;
using UnityEngine.SceneManagement;
public class SettingPanel : BasePanel<SettingPanel>
{
//声明成员变量 关联控件
public CustomGUISlider sliderMusic;
public CustomGUISlider sliderSound;
public CustomGUIToggle togMusic;
public CustomGUIToggle togSound;
public CustomGUIButton btnClose;
void Start()
{
//监听对应的事件,处理逻辑
sliderMusic.changeValue += (value) => GameDataMgr.Instance.ChangeBKValue(value);
sliderSound.changeValue += (value) => GameDataMgr.Instance.ChangeSoundValue(value);
togMusic.changeValue += (value) => GameDataMgr.Instance.OpenOrCloseBKMusic(value);
togSound.changeValue += (value) => GameDataMgr.Instance.OpenOrCloseSound(value);
btnClose.clickEvent += () =>
{
HideMe();
//判断当前所在场景
if(SceneManager.GetActiveScene().name == "BeginScene")
//把隐藏的开始界面重新显示
BeginPanel.Instance.ShowMe();
};
HideMe();
//this.gameObject.SetActive(false);
}
public void UpdatePanelInfo()
{
//更新设置信息
MusicData data = GameDataMgr.Instance.musicData;
sliderMusic.nowValue = data.bkValue;
sliderSound.nowValue = data.soundValue;
togMusic.isSel = data.isOpenBK;
togSound.isSel = data.isOpenSound;
}
public override void