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);