窗体基类
窗体的生命周期:
窗口初始化
窗口释放
显示初始化
隐藏
游戏事件注册
游戏事件注销
帧率更新等
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Game;
using GameDefine;
namespace Game.View
{
public abstract class BaseWindow
{
protected Transform mRoot; //UIRoot
protected EScenceType mScenesType; //场景类型
protected string mResName; //资源名
protected bool mResident; //是否常驻内存
protected bool mVisible = false; //是否可见
//类对象初始化
public abstract void Init();
//类对象释放
public abstract void Realse();
//窗口控制初始化
protected abstract void InitWidget();
//窗口释放
protected abstract void RealseWidght();
//游戏事件注册
protected abstract void OnAddListener();
//游戏事件注销
protected abstract void OnRemoveListener();
//显示初始化
public abstract void OnEnable();
//隐藏
public abstract void OnDisable();
//帧更新
public virtual void Update(float deltaTime) { }
public EScenceType GetSceneType()
{
return mScenesType;
}
//是否已经打开
public bool IsVisible() { return mVisible; }
//是否常驻内存
public bool IsResident() { return mResident; }
//延时删除
public void DelayDestroy()
{
if (mRoot)
{
RealseWidght();
Destroy();
}
}
//预加载
public void PreLoad()
{
if (mRoot == null)
{
if (Create())
{
InitWidget();
}
}
}
public Transform GetRoot()
{
return mRoot;
}
//显示
public void Show()
{
if (mRoot == null)
{
if (Create())
InitWidget();
}
if (mRoot && mRoot.gameObject.activeSelf == false)
{
mRoot.gameObject.SetActive(false);
mVisible = true;
OnEnable();
OnAddListener();
}
}
//隐藏
public void Hide()
{
if (mRoot && mRoot.gameObject.activeSelf == true)
{
OnDisable();
OnRemoveListener();
}
else
{
RealseWidght();
Destroy();
}
mVisible = false;
}
//销毁窗体
protected void Destroy()
{
if (mRoot)
{
LoadUiResource.DestroyLoad(mRoot.gameObject);
mRoot = null;
}
}
//创建窗体
private bool Create()
{
if (mRoot)
{
Debug.LogError("Window Error Exist!");
return false;
}
if (mResName == null || mResName == "")
{
Debug.LogError("Window Create Error Resname is Empty");
return false;
}
if (GameMethod.GetUiCamera.transform == null)
{
Debug.LogError("Window Create Error GetUiCamera is empty" + mResName);
return false;
}
GameObject obj = LoadUiResource.LoadRes(GameMethod.GetUiCamera.transform, mResName);
if (obj == null)
{
Debug.LogError("Window Create Loadres WindowName= " + mResName);
return false;
}
mRoot = obj.transform;
mRoot.gameObject.SetActive(false);
return true;
}
}
}
有限状态机
FSM基本状态:
Enter Change Exit Update