意义:编写一个通用的UI框架来方便管理界面的切入与跳出
1.用户界面进入第一次加载,界面切换时被隐藏,重新回到界面,以及退出时的四种状态调用
2.便于用户的控制与功能扩展
如何实现UI框架的搭建
1 创建UI基类,将四种状态写成虚方法供子类UI重写
(此处UIBase为脚本组件方便子UI对对象功能的操作)
2 UIManager类用于对UI界面的加载以及UI的切换
脚本
创建一个基类脚本,控制界面的四种状态
public class UIBase:MonoBehaviour{
//UI第一次切入时调用
Public virtual void UIInterFaceEnter{
}
//UI隐藏时调用
public virtual UIInterFacePause(){
}
//UI重新切入是调用
public virtual UIInterFaceResume(){
}
//UI退出时调用
public virtual UIInterFaceExit(){
}
}
将UIManager设置为单例
public class UIManager:MonoBehaviour{
static UIManager instance;
public static UIManager Instance{
get{return instance;
}
}
void Awake(){
instance=this;
}
}
用字典加载保存UI资源
//加载保存素材中的UI预设体
Dictionary<string,Gameobject> UIDict=new Dictionary<string,Gameobject>;
//添加
void AddUI(string UIname){
//判断字典中是否已经存在该UI,存在返回,否则添加
if(UIDict.ContainsKey(UIname)){
return;
}else{
//资源路径
string path="Prefab"+"/"+UIname;
Gameobject UIobj=Resources.Load(path);
//资源中有该UI添加
if(UIobj!=null){
UIDict.Add(UIname,UIobj)
}
}
}
用字典存储UI的脚本 通过预设体实例化,通过对象添加游戏脚本,通过脚本操作对象
Dictionary<string,UIBase> ScriptDirt=new Dictionary<string,UIBase>();
public UIBase InstantiteUIByName(string UIname){
//判断是否已经加载
if(ScriptDirt.ContainsKey(UIname))
return ScriptDirt[UIname];
}
//不存在就实例化并添加
Gameobject objPrefab=UIDirt[UIname];//取出预设体
Gameonject obj=Gameobject.Intantiat(objPrefab);
obj.name=UIname;
UIBase uibase=obj.Getcomponent<UIBase>();
ScriptDirt.Add(UIname,uibase);
return uibase;
用桟保存UI方便界面的显示与退出
//保存UI
Stack<UIBase> UIstack=new Stack<UIstack>();
//界面的入桟,显示出来
public void PushUI(string UIname){
if(UIstack.Count>0)
{
//桟顶的界面隐藏下去
UIBase oldUI=UIstack.peek();
//调用四种状态的隐藏方法;
oldUI.UIInterFacePause();
}
//获得新的界面
UIBase newUI=InstantiteUIByName(UIname);
//将新的界面加入桟中
UIstack.Push(UIname);
//调用新的界面进入
newUI.UIInterFacePause()
}
//界面出桟,退出
public void PopUI(){
//将ui从桟中删除
UIBase oldUI=UIstack.Pop();
//界面退出
oldUI.UIInterFaceExit();
//判断桟中是否存在UI,如果有从新显示出来
if(UIstack.Count>0)
{
UIBase newUI=UIstack.Peek();
newUI.UIInterFaceResume();
}
}