diff --git a/Assets/GameScripts.meta b/Assets/GameScripts.meta new file mode 100644 index 00000000..a9f39b65 --- /dev/null +++ b/Assets/GameScripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e350730b37a348a4ab35189c9739c329 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix.meta b/Assets/GameScripts/HotFix.meta new file mode 100644 index 00000000..39b7a38a --- /dev/null +++ b/Assets/GameScripts/HotFix.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 44b1c38e059de6542b6cd33d7258f415 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix/BattleCore.meta b/Assets/GameScripts/HotFix/BattleCore.meta new file mode 100644 index 00000000..260f6354 --- /dev/null +++ b/Assets/GameScripts/HotFix/BattleCore.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b6b7bfca93e005f45999c16054d999e7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix/BattleCore/BattleCore.Runtime.asmdef b/Assets/GameScripts/HotFix/BattleCore/BattleCore.Runtime.asmdef new file mode 100644 index 00000000..d30fb368 --- /dev/null +++ b/Assets/GameScripts/HotFix/BattleCore/BattleCore.Runtime.asmdef @@ -0,0 +1,17 @@ +{ + "name": "BattleCore.Runtime", + "rootNamespace": "BattleCore.Runtime", + "references": [ + "GUID:b48be955427611241bcb6f2a07949c5b", + "GUID:aa06d4cc755c979489c256c1bcca1dfb" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/GameScripts/HotFix/BattleCore/BattleCore.Runtime.asmdef.meta b/Assets/GameScripts/HotFix/BattleCore/BattleCore.Runtime.asmdef.meta new file mode 100644 index 00000000..55fa9cbf --- /dev/null +++ b/Assets/GameScripts/HotFix/BattleCore/BattleCore.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 641632c4f8079b94f963b5284d859a12 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix/GameBase.meta b/Assets/GameScripts/HotFix/GameBase.meta new file mode 100644 index 00000000..89357208 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameBase.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 26079995c20c1b144a1c086bf2869375 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix/GameBase/BaseClsTemplate.cs b/Assets/GameScripts/HotFix/GameBase/BaseClsTemplate.cs new file mode 100644 index 00000000..77711998 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameBase/BaseClsTemplate.cs @@ -0,0 +1,16 @@ +namespace GameBase +{ + public class BaseClsTemplate + { + protected static T Imp; + + /// + /// Unity工程,注册处理函数。 + /// + /// 实现类。 + public static void RegisterImp(T imp) + { + Imp = imp; + } + } +} \ No newline at end of file diff --git a/Assets/GameScripts/HotFix/GameBase/BaseClsTemplate.cs.meta b/Assets/GameScripts/HotFix/GameBase/BaseClsTemplate.cs.meta new file mode 100644 index 00000000..7700c077 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameBase/BaseClsTemplate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb7ef2f42b33ada47b3543dc7723fcb5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix/GameBase/GameBase.asmdef b/Assets/GameScripts/HotFix/GameBase/GameBase.asmdef new file mode 100644 index 00000000..dcb9b80d --- /dev/null +++ b/Assets/GameScripts/HotFix/GameBase/GameBase.asmdef @@ -0,0 +1,16 @@ +{ + "name": "GameBase", + "rootNamespace": "GameBase", + "references": [ + "GUID:aa06d4cc755c979489c256c1bcca1dfb" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/GameScripts/HotFix/GameBase/GameBase.asmdef.meta b/Assets/GameScripts/HotFix/GameBase/GameBase.asmdef.meta new file mode 100644 index 00000000..b379d180 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameBase/GameBase.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 08c3762f54316454ca6b6fbcb22b40e5 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix/GameBase/ILogicSys.cs b/Assets/GameScripts/HotFix/GameBase/ILogicSys.cs new file mode 100644 index 00000000..7f0209ae --- /dev/null +++ b/Assets/GameScripts/HotFix/GameBase/ILogicSys.cs @@ -0,0 +1,52 @@ +/// +/// 定义通用的逻辑接口,统一生命期调用 +/// +public interface ILogicSys +{ + /// + /// 初始化接口 + /// + /// + bool OnInit(); + + /// + /// 销毁系统 + /// + void OnDestroy(); + + /// + /// 初始化后,第一帧统一调用 + /// + void OnStart(); + + /// + /// 更新接口 + /// + /// + void OnUpdate(); + + /// + /// 渲染后调用 + /// + void OnLateUpdate(); + + /// + /// 物理帧更新 + /// + void OnFixedUpdate(); + + /// + /// 清理数据接口,切换账号/角色时调用 + /// + void OnRoleLogout(); + + /// + /// OnDrawGizmos + /// + void OnDrawGizmos(); + /// + /// 暂停游戏 + /// + /// + void OnApplicationPause(bool pause); +} \ No newline at end of file diff --git a/Assets/GameScripts/HotFix/GameBase/ILogicSys.cs.meta b/Assets/GameScripts/HotFix/GameBase/ILogicSys.cs.meta new file mode 100644 index 00000000..32ac0986 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameBase/ILogicSys.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 63ff6535a43f41d7ac793b8a153a37b6 +timeCreated: 1681213932 \ No newline at end of file diff --git a/Assets/GameScripts/HotFix/GameBase/Singleton.cs b/Assets/GameScripts/HotFix/GameBase/Singleton.cs new file mode 100644 index 00000000..be8cd554 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameBase/Singleton.cs @@ -0,0 +1,23 @@ +using TEngine; + +namespace GameBase +{ + public class Singleton where T:new() + { + private static T _instance; + public static T Instance + { + get + { + if (null == _instance) + { + _instance = new T(); + Log.Assert(_instance != null); + } + + return _instance; + } + } + + } +} diff --git a/Assets/GameScripts/HotFix/GameBase/Singleton.cs.meta b/Assets/GameScripts/HotFix/GameBase/Singleton.cs.meta new file mode 100644 index 00000000..0c5d505a --- /dev/null +++ b/Assets/GameScripts/HotFix/GameBase/Singleton.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b68a449df312429cbb27873984ec238e +timeCreated: 1681214042 \ No newline at end of file diff --git a/Assets/GameScripts/HotFix/GameLogic.meta b/Assets/GameScripts/HotFix/GameLogic.meta new file mode 100644 index 00000000..923fedaa --- /dev/null +++ b/Assets/GameScripts/HotFix/GameLogic.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f8ea72f19248ebd4e817160319583cac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix/GameLogic/GameApp.cs b/Assets/GameScripts/HotFix/GameLogic/GameApp.cs new file mode 100644 index 00000000..d647d44c --- /dev/null +++ b/Assets/GameScripts/HotFix/GameLogic/GameApp.cs @@ -0,0 +1,120 @@ +using GameBase; +using TEngine; + +public partial class GameApp:Singleton +{ + /// + /// 热更域App主入口。 + /// + /// + public static void Entrance(object[] objects) + { + Log.Warning("======= 看到此条日志代表你成功运行了热更新代码 ======="); + Log.Warning("======= Entrance GameApp ======="); + Instance.Init(); + Instance.Start(); + Utility.Unity.AddUpdateListener(Instance.Update); + Utility.Unity.AddFixedUpdateListener(Instance.FixedUpdate); + Utility.Unity.AddLateUpdateListener(Instance.LateUpdate); + Utility.Unity.AddDestroyListener(Instance.OnDestroy); + Utility.Unity.AddOnDrawGizmosListener(Instance.OnDrawGizmos); + Utility.Unity.AddOnApplicationPauseListener(Instance.OnApplicationPause); + } + + private void Start() + { + GameTime.StartFrame(); + var listLogic = m_listLogicMgr; + var logicCnt = listLogic.Count; + for (int i = 0; i < logicCnt; i++) + { + var logic = listLogic[i]; + logic.OnStart(); + } + } + + private void Update() + { + GameTime.StartFrame(); + TProfiler.BeginFirstSample("Update"); + var listLogic = m_listLogicMgr; + var logicCnt = listLogic.Count; + for (int i = 0; i < logicCnt; i++) + { + var logic = listLogic[i]; + TProfiler.BeginSample(logic.GetType().FullName); + logic.OnUpdate(); + TProfiler.EndSample(); + } + TProfiler.EndFirstSample(); + } + + private void FixedUpdate() + { + GameTime.StartFrame(); + TProfiler.BeginFirstSample("FixedUpdate"); + var listLogic = m_listLogicMgr; + var logicCnt = listLogic.Count; + for (int i = 0; i < logicCnt; i++) + { + var logic = listLogic[i]; + TProfiler.BeginSample(logic.GetType().FullName); + logic.OnFixedUpdate(); + TProfiler.EndSample(); + } + TProfiler.EndFirstSample(); + } + + private void LateUpdate() + { + GameTime.StartFrame(); + TProfiler.BeginFirstSample("LateUpdate"); + var listLogic = m_listLogicMgr; + var logicCnt = listLogic.Count; + for (int i = 0; i < logicCnt; i++) + { + var logic = listLogic[i]; + TProfiler.BeginSample(logic.GetType().FullName); + logic.OnLateUpdate(); + TProfiler.EndSample(); + } + TProfiler.EndFirstSample(); + } + + private void OnDestroy() + { + GameTime.StartFrame(); + var listLogic = m_listLogicMgr; + var logicCnt = listLogic.Count; + for (int i = 0; i < logicCnt; i++) + { + var logic = listLogic[i]; + logic.OnDestroy(); + } + } + + private void OnDrawGizmos() + { +#if UNITY_EDITOR + GameTime.StartFrame(); + var listLogic = m_listLogicMgr; + var logicCnt = listLogic.Count; + for (int i = 0; i < logicCnt; i++) + { + var logic = listLogic[i]; + logic.OnDrawGizmos(); + } +#endif + } + + private void OnApplicationPause(bool isPause) + { + var listLogic = m_listLogicMgr; + var logicCnt = listLogic.Count; + for (int i = 0; i < logicCnt; i++) + { + var logic = listLogic[i]; + logic.OnApplicationPause(isPause); + } + } +} \ No newline at end of file diff --git a/Assets/GameScripts/HotFix/GameLogic/GameApp.cs.meta b/Assets/GameScripts/HotFix/GameLogic/GameApp.cs.meta new file mode 100644 index 00000000..b98cd91e --- /dev/null +++ b/Assets/GameScripts/HotFix/GameLogic/GameApp.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5fabb458720ae14bbdb4d781d4ef34e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix/GameLogic/GameApp_RegisterSystem.cs b/Assets/GameScripts/HotFix/GameLogic/GameApp_RegisterSystem.cs new file mode 100644 index 00000000..cfc6aea5 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameLogic/GameApp_RegisterSystem.cs @@ -0,0 +1,55 @@ +using System.Collections.Generic; +using TEngine; + +public partial class GameApp +{ + private List m_listLogicMgr; + + private void Init() + { + m_listLogicMgr = new List(); + RegisterAllSystem(); + InitSystemSetting(); + } + + /// + /// 设置一些通用的系统属性。 + /// + private void InitSystemSetting() + { + + } + + /// + /// 注册所有逻辑系统 + /// + private void RegisterAllSystem() + { + + } + + /// + /// 注册逻辑系统。 + /// + /// ILogicSys + /// + protected bool AddLogicSys(ILogicSys logicSys) + { + + if (m_listLogicMgr.Contains(logicSys)) + { + Log.Fatal("Repeat add logic system: {0}", logicSys.GetType().Name); + return false; + } + + if (!logicSys.OnInit()) + { + Log.Fatal("{0} Init failed", logicSys.GetType().Name); + return false; + } + + m_listLogicMgr.Add(logicSys); + + return true; + } +} \ No newline at end of file diff --git a/Assets/GameScripts/HotFix/GameLogic/GameApp_RegisterSystem.cs.meta b/Assets/GameScripts/HotFix/GameLogic/GameApp_RegisterSystem.cs.meta new file mode 100644 index 00000000..cdd54db0 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameLogic/GameApp_RegisterSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4703541a565f5ec4bb35edd81c28958c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix/GameLogic/GameLogic.asmdef b/Assets/GameScripts/HotFix/GameLogic/GameLogic.asmdef new file mode 100644 index 00000000..a7f5bcb9 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameLogic/GameLogic.asmdef @@ -0,0 +1,19 @@ +{ + "name": "GameLogic", + "rootNamespace": "GameLogic", + "references": [ + "GUID:b48be955427611241bcb6f2a07949c5b", + "GUID:08c3762f54316454ca6b6fbcb22b40e5", + "GUID:a90b2d3377c5e4a4db95cc44fb82045e", + "GUID:aa06d4cc755c979489c256c1bcca1dfb" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/GameScripts/HotFix/GameLogic/GameLogic.asmdef.meta b/Assets/GameScripts/HotFix/GameLogic/GameLogic.asmdef.meta new file mode 100644 index 00000000..41ea41da --- /dev/null +++ b/Assets/GameScripts/HotFix/GameLogic/GameLogic.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: acd6baa97ba40d3478c29cd9c76ff9e3 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix/GameProto.meta b/Assets/GameScripts/HotFix/GameProto.meta new file mode 100644 index 00000000..fd5f89b5 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameProto.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e6aea5b9046c6648b43fd31121b422f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/HotFix/GameProto/GameProto.asmdef b/Assets/GameScripts/HotFix/GameProto/GameProto.asmdef new file mode 100644 index 00000000..709a41c1 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameProto/GameProto.asmdef @@ -0,0 +1,17 @@ +{ + "name": "GameProto", + "rootNamespace": "", + "references": [ + "GUID:b48be955427611241bcb6f2a07949c5b", + "GUID:aa06d4cc755c979489c256c1bcca1dfb" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/GameScripts/HotFix/GameProto/GameProto.asmdef.meta b/Assets/GameScripts/HotFix/GameProto/GameProto.asmdef.meta new file mode 100644 index 00000000..dbb6ce79 --- /dev/null +++ b/Assets/GameScripts/HotFix/GameProto/GameProto.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a90b2d3377c5e4a4db95cc44fb82045e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/Main.meta b/Assets/GameScripts/Main.meta new file mode 100644 index 00000000..a58cb795 --- /dev/null +++ b/Assets/GameScripts/Main.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce8311fb28eecaf42ad9113e9e4a5912 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: