Unity开发UI框架搭建

意义:编写一个通用的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();
}
}

猜你喜欢

转载自blog.csdn.net/chenzhe_n/article/details/78137987