using System;------------------声音框架-----------------------------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SoundManage : MonoBehaviour
{
//单例
public static SoundManage Instance;
//音乐播放器组件
private AudioSource _audioSource;
//音乐文件位置
public string ResourcesMusicDir="Audio";
private void Awake()
{
Instance = this;
//场景加载时不销毁
DontDestroyOnLoad(gameObject);
_audioSource = GetComponent<AudioSource>();
//初始设置
_audioSource.loop = true;
_audioSource.playOnAwake = false;
}
private void Start()
{
}
/// <summary>
/// 播放音乐
/// </summary>
/// <param name="musicName"></param>
public void PlayBgm(string musicName)
{
string path = ResourcesMusicDir + "/" + musicName;
_audioSource.clip= Resources.Load<AudioClip>(path);
_audioSource.Play();
}
/// <summary>
/// 停止播放
/// </summary>
public void StopBgm()
{
_audioSource.clip = null;
_audioSource.Stop();
}
/// <summary>
/// 是否静音
/// </summary>
public bool Mute
{
get => _audioSource.mute;
set => _audioSource.mute = value;
}
/// <summary>
/// 播放音效
/// </summary>
/// <param name="audioName"></param>
/// <param name="playPoint"></param>
public void PlayAudio(string audioName,Vector2 playPoint)
{
string path = ResourcesMusicDir + "/" + audioName;
//指定播放路径
AudioClip ac= Resources.Load<AudioClip>(path);
AudioSource.PlayClipAtPoint(ac,playPoint);
}
//1调节增加音量2实现控制音量开关的功能
/// <summary>
/// 调节音量
/// </summary>
/// <param name="num"></param>
public void PlayVolume(float num)
{
_audioSource.volume = num;
}
}
using System.Collections;------UI基类----------------------
using System.Collections.Generic;
using UnityEngine;
public class UIBase : MonoBehaviour
{
/// <summary>
/// 进入游戏
/// </summary>
public virtual void DoOnEnter()
{
}
/// <summary>
/// 暂停游戏
/// </summary>
public virtual void DoOnPause()
{
}
/// <summary>
/// 恢复游戏
/// </summary>
public virtual void DoOnRestart()
{
}
/// <summary>
/// 退出游戏
/// </summary>
public virtual void DoOnExit()
{
}
}
using System;----------------ui框架----------------------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Serialization;
public class UIManage : MonoBehaviour
{
//单例
public static UIManage Instance;
//存放UI面板的栈
private Stack<UIBase> _uiStack=new Stack<UIBase>();
//存放UI预设体的字典
private Dictionary<string,GameObject> _uiObject=new Dictionary<string, GameObject>();
//存脚本的字典
private Dictionary<string,UIBase> _uiBases=new Dictionary<string, UIBase>();
//预设体所在文件夹名称
public string resourcesUiPrefabDir = "UIPre";
private void Awake()
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
/// <summary>
/// 入栈-让当前界面显示
/// </summary>
/// <param name="uiName"></param>
public void PushUiPanel(string uiName)
{
if (_uiStack.Count>0)
{
//拿到原来的栈顶元素,暂停
UIBase oldTopUi= _uiStack.Peek();
oldTopUi.DoOnPause();
}
//得到新的ui面板
UIBase newTopUi= GetUiBase(uiName);
//当前的UI进入游戏
newTopUi.DoOnEnter();
//入栈
_uiStack.Push(newTopUi);
}
/// <summary>
/// 根据名字得到UI面板
/// </summary>
/// <param name="uiName"></param>
private UIBase GetUiBase(string uiName)
{
//如果脚本字典里包含这个名字
if (_uiBases.ContainsKey(uiName))
{
return _uiBases[uiName];
}
//如果预设体字典中不包含该ui面板的预设体
if (!_uiObject.ContainsKey(uiName))
{
//去加载预设体资源
string uiPath = resourcesUiPrefabDir + "/" + uiName;
GameObject uiPrefab= Resources.Load<GameObject>(uiPath);
if (uiPrefab!=null)
{
//存入字典中
_uiObject[uiName] = uiPrefab;
}
else
{
Debug.Log("没这个资源");
return null;
}
}
//根据从字典中取出的预设体生成UI对象
GameObject uiObj= Instantiate(_uiObject[uiName]);
//赐名
uiObj.name = uiName;
//取当前对象的脚本组件
UIBase uiBase= uiObj.GetComponent<UIBase>();
//将脚本存到脚本字典中
_uiBases[uiName] = uiBase;
return uiBase;
}
}