UI框架

来源:互联网 发布:主动防御系统 知乎 编辑:程序博客网 时间:2024/04/27 23:38
UI框架
UI状态机
punlice enum EUiState
{
Unknow,//未知
Init,//空
Lobby,//主界面
Login,//登陆
Prota,//主角
Task,//任务
Loadind,//进度条
}


GamaStart中初始化:UI状态机和ui系统
UI状态机:委托事件 记录切换状态之前和之后回调  并记录当前ui状态
public delegete void OnUiStateChangeDelegate(EUiState oldState,EUiState newState);
public event OnUiStateChangeDelegate BeforeUiStateChangeEvent;
public event OnUiStateChangeDelegate AfterUiStateChangeEvnet;
public void ChangeUiState(EUiState state)
{
EUiState froState = mUiState;
EUiState toState = state;
if(BeforeUiStateChangeEvent!=null)
{
BeforeUiStateChangeEvent(fromeState,toState);
}
mUiState = state;
if(AfterUiStateChangeEvnet!=null)
{
AfterUiStateChangeEvnet(fromeState,toState);
}
}
在自己的Init()函数中注册事件,然后在每个view加载的时候OnInit初始化时候就要注册这个事件(before判断toState不是本身界面,就关闭本身,在After中判断是本身界面就打开本身)这样的话在ui状态机中的事件函数基本不做太多的处理


另外一种情况比如 商店界面有好多子界面,这个要做另外的处理,商店类中包各个子类
先定义子界面的枚举
publice enem ESubView
{
...,
...,
...,
}


点击不同的标签按钮出发private void ChangeSubView(ESubView subView){}//记录当前子界面
函数功能根据ESubView关闭和打开相应的子界面同时设置参数填充内容




UI系统:UIManager.CreateInstance.Init()加载预制体,用泛型,view预制体的名字和脚本的名字一样,加载预制体的时候就可以添加view脚本,并初始化脚本(查找组建,绑定按钮监听事件等)
View脚本继承实体类Singleton<T>继承View基类,(实体类一种是需要创建对象,出现在场景面板上,一种是只需要获得脚本本身)


单体类(泛型)
一种是需要在场景中生成的那种
sInstance = new GameObject(typeof(T).ToString()).AddComponent<T>();
一种是不需要生成比如view预制体 加载的时候初始化中给单例负值 sInstance = this. as T;
还有一种是比如参数配置的预制体,但是又不需要在场景中生成sInstance = new T();


客户端---服务端
请求(客户端)------回调(服务器返回的结果)


物品点击事件:比如背包 点击其中一个背包如何处理
每个背包属于一item都要一个脚本,点击触发点击函数,同时脚本有有委托事件
public delegate void OnItemClickDelegate(UserEquipItem item);
public event OnItemClickDelegate OnItemClick;
参数是脚本本身
在按钮触发函数中
if(OnItemClick;)
{
OnItemClick(this);
}
在view中创建item设置参数的时候,并注册这个函数item.OnItem +=OnItemClick;
在OnItemClick(UserEquipItem item){}做相应的处理
0 0
原创粉丝点击