diff --git a/UnityProject/Assets/GameScripts/HotFix/GameBase/SingletonBehaviour.cs b/UnityProject/Assets/GameScripts/HotFix/GameBase/SingletonBehaviour.cs index 91010dbc..16f3f067 100644 --- a/UnityProject/Assets/GameScripts/HotFix/GameBase/SingletonBehaviour.cs +++ b/UnityProject/Assets/GameScripts/HotFix/GameBase/SingletonBehaviour.cs @@ -36,7 +36,10 @@ namespace GameBase protected virtual void OnDestroy() { - Release(); + if (this == _instance) + { + Release(); + } } /// @@ -60,7 +63,7 @@ namespace GameBase if (_instance != null) { SingletonSystem.Release(_instance.gameObject); - _instance = null; + _instance = null; } } @@ -96,7 +99,7 @@ namespace GameBase } } - if(_instance == null) + if (_instance == null) { Log.Error($"Can't create SingletonBehaviour<{typeof(T)}>"); } diff --git a/UnityProject/Assets/GameScripts/HotFix/GameLogic/GameApp_RegisterSystem.cs b/UnityProject/Assets/GameScripts/HotFix/GameLogic/GameApp_RegisterSystem.cs index 357f72a1..9c592297 100644 --- a/UnityProject/Assets/GameScripts/HotFix/GameLogic/GameApp_RegisterSystem.cs +++ b/UnityProject/Assets/GameScripts/HotFix/GameLogic/GameApp_RegisterSystem.cs @@ -3,10 +3,10 @@ using GameLogic; using TEngine; using UnityEngine; -public partial class GameApp +public partial class GameApp : Singleton { private List _listLogicMgr; - + public override void Active() { CodeTypes.Instance.Init(_hotfixAssembly.ToArray()); @@ -15,13 +15,13 @@ public partial class GameApp RegisterAllSystem(); InitSystemSetting(); } - + /// /// 设置一些通用的系统属性。 /// private void InitSystemSetting() { - + } /// @@ -32,7 +32,7 @@ public partial class GameApp //带生命周期的单例系统。 AddLogicSys(BehaviourSingleSystem.Instance); } - + /// /// 注册逻辑系统。 /// diff --git a/UnityProject/Assets/GameScripts/Main/Procedure/ProcedureLoadAssembly.cs b/UnityProject/Assets/GameScripts/Main/Procedure/ProcedureLoadAssembly.cs index b8090917..34b90dfe 100644 --- a/UnityProject/Assets/GameScripts/Main/Procedure/ProcedureLoadAssembly.cs +++ b/UnityProject/Assets/GameScripts/Main/Procedure/ProcedureLoadAssembly.cs @@ -9,6 +9,7 @@ using UnityEngine; using TEngine; using System.Reflection; using YooAsset; +using Cysharp.Threading.Tasks; namespace GameMain { @@ -38,6 +39,12 @@ namespace GameMain base.OnEnter(procedureOwner); Log.Debug("HyBridCLR ProcedureLoadAssembly OnEnter"); m_procedureOwner = procedureOwner; + + LoadAssembly().Forget(); + } + + private async UniTaskVoid LoadAssembly() + { m_LoadAssemblyComplete = false; m_HotfixAssemblys = new List(); @@ -55,7 +62,7 @@ namespace GameMain { m_LoadMetadataAssemblyComplete = true; } - + if (!SettingsUtils.HybridCLRCustomGlobalSettings.Enable || GameModule.Resource.PlayMode == EPlayMode.EditorSimulateMode) { m_MainLogicAssembly = GetMainLogicAssembly(); @@ -75,10 +82,11 @@ namespace GameMain SettingsUtils.HybridCLRCustomGlobalSettings.AssemblyTextAssetPath, $"{hotUpdateDllName}{SettingsUtils.HybridCLRCustomGlobalSettings.AssemblyTextAssetExtension}")); } - + Log.Debug($"LoadAsset: [ {assetLocation} ]"); m_LoadAssetCount++; - GameModule.Resource.LoadAsset(assetLocation,LoadAssetSuccess); + var result = await GameModule.Resource.LoadAssetAsync(assetLocation); + LoadAssetSuccess(result); } m_LoadAssemblyWait = true; @@ -94,7 +102,7 @@ namespace GameMain m_LoadAssemblyComplete = true; } } - + protected override void OnUpdate(IFsm procedureOwner, float elapseSeconds, float realElapseSeconds) { base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds); @@ -108,7 +116,7 @@ namespace GameMain } AllAssemblyLoadComplete(); } - + private void AllAssemblyLoadComplete() { ChangeState(m_procedureOwner); @@ -231,11 +239,11 @@ namespace GameMain SettingsUtils.HybridCLRCustomGlobalSettings.AssemblyTextAssetPath, $"{aotDllName}{SettingsUtils.HybridCLRCustomGlobalSettings.AssemblyTextAssetExtension}")); } - - + + Log.Debug($"LoadMetadataAsset: [ {assetLocation} ]"); m_LoadMetadataAssetCount++; - GameModule.Resource.LoadAsset(assetLocation,LoadMetadataAssetSuccess); + GameModule.Resource.LoadAsset(assetLocation, LoadMetadataAssetSuccess); } m_LoadMetadataAssemblyWait = true; }