最初梦想-001

IRLRuntime更新

主工程在HotFix_Project文件夹下,VS2015打开   HotFix_Project.csproj

UI_Main类    继承自     UI_Logic类      重写      InitializeUI方法          初始化

初始化方法:初始化SPUI,添加监听事件

 _spui = new SPUI_Main();
            _spui.BaseInit(base.gameObject, ILRT.Instance);
            base.baseSpui = _spui;

UIEventListener.Get(_spui.BT_Backpack).onClick += BTClick_Backpack;
 public void BaseInit(GameObject obj, MonoBehaviour root)
        {
            _root = root;
            thisTransform = obj.transform;
            thisGameObject = obj;
            InitializeSPUI();
        }


 protected abstract void InitializeSPUI();

SPUI_Main类    继承自    SPU_Panel类 ,为SPU基类

复写父类方法,进行组建的查找

   protected override void InitializeSPUI()
        {
            mapCamera = GetTransform("Camera").GetComponent<Camera>();
        }

UIEventListener类:    UI界面的事件监听类

点击界面背包按钮

void BTClick_Backpack(GameObject sender)
        {
            Globals.MUIManager.AddUI<UI_Backpack>(delegate (UI_Backpack ui)
            {
                ui.WhenEnterUI();
                ui.OnCloseAction = OnResume;
            });
        }

Globals类:全局变量    所有资源的存储

 public static UIManager MUIManager;
        public static DataTableManager MDataTableManager;
        public static SoundManager MSoundManager;
        public static ScenesManager MScenesManager;
        public static LSNetMgr MLSNetManager;
        public static GSNetMgr MNetManager;
        public static CSNetMgr MCSNetManager;
        public static RadioManager MRadioManager;
        public static GuidanceManager MGuidanceManager;
        public static ResourceManager MResourceManager;
        public static TimeManager MTimeManager;

其中有开始游戏初始化

public static void StartGame()
        {
            GameDefine.ReadConfigFile();//读取本地配置
            Time.timeScale = GameDefine.GameSpeed;//默认游戏速度
            Screen.sleepTimeout = GameDefine.Setting_KeepBirght ? SleepTimeout.NeverSleep : SleepTimeout.SystemSetting;//让屏幕始终亮着

            //如果在战斗时服务器重启服务器,则先切到空场景,以释放战斗场景资源
            if (UnityEngine.SceneManagement.SceneManager.GetActiveScene().buildIndex == 2)
            {
                UnityEngine.SceneManagement.SceneManager.LoadScene(1);
            }
            //清空所有消息订阅
            EventManager.UnsubscribeAll();
            SetPlatForm();//设置平台
            MUIManager = new HotFix_Project.UIManager();
            MUIManager.Init();
            MDataTableManager = new HotFix_Project.Config.DataTableManager();
            MSoundManager = new HotFix_Project.SoundManager();
            MScenesManager = new HotFix_Project.ScenesManager();
            MLSNetManager = new HotFix_Project.NetWork.LSNetMgr();
            MNetManager = new HotFix_Project.NetWork.GSNetMgr();
            MCSNetManager = new HotFix_Project.NetWork.CSNetMgr();
            MRadioManager = new HotFix_Project.RadioManager();
            MGuidanceManager = new HotFix_Project.GuidanceManager();
            MDeadTideManager = new HotFix_Project.DeadTideManager();
            MVersionManager = new HotFix_Project.VersionManager();
            MGoogleLogin = new HotFix_Project.ThirdPlatformLogin();
            MIAPManager = new HotFix_Project.IAPManager();
            MResourceManager = ILRT.Instance.MResourceManager;
            MTimeManager = ILRT.Instance.MTimeManager;
            MDownloadManager = ILRT.Instance.MDownloadManager;

            MNoticeManager = new HotFix_Project.NoticeManager();
            MPeopleManager = new HotFix_Project.PeopleManager();
            MPlayerBuffManager = new HotFix_Project.PlayerBuffManager();
            MVipManager = new HotFix_Project.VipManager();
            MAchievementManager = new HotFix_Project.AchievementManager();
            MChatManager = new HotFix_Project.ChatManager();
            MBattleManager = new HotFix_Project.Fight.BattleManager();
            MMilitaryAcitonManager = new HotFix_Project.MilitaryAcitonManager();
            MPVPManager = new HotFix_Project.Fight.PVPManager();

            Language.ReadConfigFile();
            MUIManager.AddUI<HotFix_Project.UI.UI_Start>();//进入开始界面

UIManager中AddUI方法:根据T的名字去    ILRT.Instance.MResourceManager中的    ResourceManager类中加载实例

 public void AddUI<T>(GUICallback<T> callback = null) where T : HotFix_Project.UI.UI_Logic
        {

            T uiLogic = GetUI<T>();
            if (null == uiLogic)
            {
                if (typeof(T) != typeof(UI_Guidance))
                {
                    Rooter.RemoveHand();
                }


                string ui_name = typeof(T).ToString();
                ui_name = ui_name.Substring(ui_name.LastIndexOf('.') + 1);


                GameObject uiObj = ILRT.Instance.MResourceManager.CreatGameObjectAtWord(uiPfbPath + ui_name, Vector2.zero);
                if (uiObj == null)
                {
                    MDebug.LogError("didn't find " + ui_name + "'s perfab");
                    return;
                }
                uiObj.name = ui_name;
                Transform uiTrans = uiObj.transform;
                uiTrans.parent = uiRoot.transform;
                uiTrans.localScale = Vector3.one;
                uiTrans.localPosition = Vector3.zero;

                FindLabel(uiTrans);
                //uiLogic = uiObj.AddComponent<T>();
                
                //动态创建类的实例
                uiLogic = System.Activator.CreateInstance<T>();

                //资源和脚本的绑定
                uiLogic.Init(uiObj);

                //存入UI字典中
                existingUI[typeof(T).ToString()] = uiLogic;

            }
            else
            {
                if (uiLogic.AwaysExits)
                {
                    uiLogic.Hide(false);
                }
            }
            if (null != callback)
                callback(uiLogic);
        }

uiLogic = System.Activator.CreateInstance<T>();//可以动态创建类的实例
 

ResourceManager类   继承自   MonoBehaviour

 public GameObject CreatGameObjectAtLocal(string path, Transform parent, Vector3 posion, Vector3 eulerAngles);
    public GameObject CreatGameObjectAtWord(string path, Vector3 posion);

猜你喜欢

转载自blog.csdn.net/qq_35647121/article/details/81077571
001