大型Moba项目开发记录2

窗体基类

窗体的生命周期:
窗口初始化
窗口释放
显示初始化
隐藏
游戏事件注册
游戏事件注销
帧率更新等

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

猜你喜欢

转载自blog.csdn.net/gsm958708323/article/details/80203834