diff --git a/Assets/00.StaryEvo/Runtime/PlayerSettings/DomainConfig.cs b/Assets/00.StaryEvo/Runtime/PlayerSettings/DomainConfig.cs index 1dfb1c7..bd2fdfb 100644 --- a/Assets/00.StaryEvo/Runtime/PlayerSettings/DomainConfig.cs +++ b/Assets/00.StaryEvo/Runtime/PlayerSettings/DomainConfig.cs @@ -26,22 +26,30 @@ namespace Stary.Evo /// [Sirenix.OdinInspector.ReadOnly] public string className; + [InfoBox( "Prefab(仅加载预制体) Scene(加载场景)")] + [OnValueChanged("SetLoadResType")] public LoadResType loadResType; - [Sirenix.OdinInspector.ReadOnly] [ShowIf("loadResType", LoadResType.Prefab)] + +#if UNITY_EDITOR + + [ShowIf("loadResType", LoadResType.Scene)] [OnValueChanged("LoadScenePath")] + [ValidateInput("ValidateScenePath", "只能使用 本Domain 目录下的场景!", InfoMessageType.Error)] + public SceneAsset sceneAsset; +#endif + [InfoBox( "Static(持久化存在,不可手动卸载) Additive(叠加,可手动卸载) Single(下一个加载自动卸载) ")] + [ShowIf("loadResType", LoadResType.Prefab)] + public DomainLoadType domainLoadType; + + [ShowIf("loadResType", LoadResType.Scene)] + public LoadSceneMode loadSceneMode; /// /// 入口预制体 /// + [Sirenix.OdinInspector.ReadOnly] [ShowIf("loadResType", LoadResType.Prefab)] public string mainPrefab; -#if UNITY_EDITOR - [ShowIf("loadResType", LoadResType.Scene)] [OnValueChanged("LoadScenePath")] - public SceneAsset sceneAsset; -#endif - [ShowIf("loadResType", LoadResType.Scene)] - public LoadSceneMode loadSceneMode; - [ShowIf("loadResType", LoadResType.Scene)] [ReadOnly] public string scenePath; @@ -61,11 +69,43 @@ namespace Stary.Evo scenePath = AssetDatabase.GetAssetPath(sceneAsset); sceneIdentifier = $"Scenes_{sceneAsset.name}"; } + private bool ValidateScenePath(SceneAsset scene) + { + if (scene == null) return true; + + string path = AssetDatabase.GetAssetPath(scene); + return path.StartsWith($"Assets/Domain/{domain}/AddressableRes/Scenes/"); + } #endif + private void SetLoadResType() + { + if (loadResType == LoadResType.Prefab) + { + sceneAsset = null; + scenePath = null; + sceneIdentifier = null; + } + } public enum LoadResType { Prefab, Scene } + + public enum DomainLoadType + { + /// + /// 下一个加载自动卸载 + /// + Single, + /// + /// 叠加,可手动卸载 + /// + Additive, + /// + /// 持久化存在,不可手动卸载 + /// + Static + } } } \ No newline at end of file diff --git a/Assets/00.StaryEvo/Runtime/Tool/EventKit/Example.unitypackage.meta b/Assets/00.StaryEvo/Runtime/Tool/EventKit/Example.unitypackage.meta deleted file mode 100644 index daf4943..0000000 --- a/Assets/00.StaryEvo/Runtime/Tool/EventKit/Example.unitypackage.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 194887e39d37cd742a57ffe4cfe1b21b -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/00.StaryEvo/package.json b/Assets/00.StaryEvo/package.json index 339a909..abbabd8 100644 --- a/Assets/00.StaryEvo/package.json +++ b/Assets/00.StaryEvo/package.json @@ -1,6 +1,6 @@ { "name": "com.staryevo.main", - "version": "2.1.5", + "version": "2.1.6", "displayName": "00.StaryEvo", "description": "This is an Framework package(后台服务器版本,端口9527)", "unity": "2021.3", diff --git a/Assets/00.StaryEvoTools/Editor/BuildAsset/ChangePlayerMode/ChangePointClondMode.cs b/Assets/00.StaryEvoTools/Editor/BuildAsset/ChangePlayerMode/ChangePointClondMode.cs deleted file mode 100644 index 1b14656..0000000 --- a/Assets/00.StaryEvoTools/Editor/BuildAsset/ChangePlayerMode/ChangePointClondMode.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using System.Linq; -using UnityEditor; -using UnityEngine; - -namespace Stary.Evo.Editor -{ - public class ChangePointClondMode - { - public static PointClondMode PointClondMode - { - get => _pointClondMode; - set => SetPoindClondMode(value); - } - - private static PointClondMode _pointClondMode; - - private const string EditorNotMode = "Evo/Schema/ChangePointClond/NotPointClond"; - private const string EditorImmersalMode = "Evo/Schema/ChangePointClond/Immersal"; - - [MenuItem(EditorNotMode)] - private static void SetNotMode() => SetPoindClondMode(PointClondMode.NotPointClond); - - [MenuItem(EditorImmersalMode)] - private static void SetImmersalMode() => SetPoindClondMode(PointClondMode.Immersal); - - // [MenuItem(WebPlayMode)] - // private static void SetWebMode() => SetPlayerMode(HotUpdateMode.WEB_PLAYMODE); - - [MenuItem(EditorNotMode, true)] - private static bool ValidateModeMenu() - { - string platform = CustomEditorPrefs.GetString("ChangePoindClondSchema"); - Menu.SetChecked(EditorNotMode, platform == PointClondMode.NotPointClond.ToString()); - Menu.SetChecked(EditorImmersalMode, platform == PointClondMode.Immersal.ToString()); - //Menu.SetChecked(WebPlayMode, platform == HotUpdateMode.WEB_PLAYMODE.ToString()); - Debug.Log($"ChangePoindClondSchema:{platform}"); - return true; - } - - public static void SetPoindClondMode(PointClondMode mode) - { - // 清除所有旧模式定义 - var currentTarget = EditorUserBuildSettings.selectedBuildTargetGroup; - if (currentTarget == BuildTargetGroup.Unknown) return; - - var defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentTarget) - .Split(';') - .Where(d => !Enum.GetNames(typeof(HotUpdateMode)).Contains(d)) - .ToList(); - - // 添加新模式 - defines.Add(mode.ToString()); - PlayerSettings.SetScriptingDefineSymbolsForGroup(currentTarget, string.Join(";", defines)); - _pointClondMode = mode; - CustomEditorPrefs.SetString("ChangePoindClondSchema", _pointClondMode.ToString()); - - ValidateModeMenu(); - AssetDatabase.Refresh(); - // 添加解决方案文件重新生成逻辑 - EditorApplication.delayCall += () => - { - UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation(); - Debug.Log($"当前编译符号: {string.Join(";", defines)}"); // 添加调试日志 - }; - } - } - - public enum PointClondMode - { - //非点云模式, - NotPointClond, - //Immersal模式 - Immersal, - } -} \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Editor/BuildAsset/ChangePlayerMode/ChangePointClondMode.cs.meta b/Assets/00.StaryEvoTools/Editor/BuildAsset/ChangePlayerMode/ChangePointClondMode.cs.meta deleted file mode 100644 index d5208d9..0000000 --- a/Assets/00.StaryEvoTools/Editor/BuildAsset/ChangePlayerMode/ChangePointClondMode.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 076111eb4cfd413287c1d7f299fe5a1f -timeCreated: 1757471872 \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Base/AppConfig.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Base/AppConfig.cs index 10b51c2..f38f21c 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Base/AppConfig.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Base/AppConfig.cs @@ -13,6 +13,7 @@ namespace Stary.Evo public static string PackageDomainName { get; set; } + public static bool IsLogin { get; set; } public static string IpConfig { get; set; } public static string UserName { get; set; } public static string PassWord { get; set; } @@ -21,37 +22,13 @@ namespace Stary.Evo public static string MainDomainVersion { get; set; } - /// - /// 主场景main实例物体 - /// - private static GameObject _MainBaseModel; + public static bool DeveloperMode { get { return HybridClREntrance.Global.stage == StageType.Developer || PackageDomainName == "Main"; } } - - public static bool MainPackageMode - { - get { return PackageDomainName == "Main"; } - } - - /// - /// 赋值默认的实例 - /// - public static void SetDefaultMainInstance(GameObject mainbase) - { - _MainBaseModel = mainbase; - } - - /// - /// 赋值默认的实例 - /// - public static GameObject GetDefaultMainInstance() - { - return _MainBaseModel; - } } public class GlobalConfig diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/AnimClipData.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/AnimClipData.cs deleted file mode 100644 index 327d252..0000000 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/AnimClipData.cs +++ /dev/null @@ -1,64 +0,0 @@ -using UnityEngine; - -namespace Stary.Evo -{ - public class AnimClipData - { - public string AnimName; - public AnimationClip AnimClip; - public AnimMode AnimMode; - } - - public enum AnimMode - { - /// - /// 入场1 - /// - Entrance1, - - /// - /// 入场2 - /// - Entrance2, - - /// - /// 退出1 - /// - Exit1, - - /// - /// 退出2 - /// - Exit2, - - /// - /// 空闲 - /// - Idle, - - /// - /// 飞行 - /// - Flying, - - /// - /// 引导 - /// - Guide, - - /// - /// 反馈 - /// - Feedback, - - /// - /// 对话空闲 - /// - TalkIdle, - - /// - /// 对话 - /// - Talking, - } -} \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/AnimClipData.cs.meta b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/AnimClipData.cs.meta deleted file mode 100644 index addfeba..0000000 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/AnimClipData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 46ff0818b37d41c4beea00d1081610f7 -timeCreated: 1767948662 \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/DomainAssetSystem.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/DomainAssetSystem.cs new file mode 100644 index 0000000..980128c --- /dev/null +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/DomainAssetSystem.cs @@ -0,0 +1,241 @@ +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using Cysharp.Threading.Tasks; +using Main; +using Stary.Evo.InformationSave; +using UnityEngine; +using UnityEngine.SceneManagement; +using YooAsset; + +namespace Stary.Evo +{ + public class DomainAssetSystem : IDisposable + { + private static OpenDomainType _openDomainType { get; set; } + private static TransformCtor _transformCtor { get; set; } + public static ProgressBarPanel ProgressBarPanel { get; set; } + + + private static readonly List _domainStaticNameEntities = new List(); + private static List _domainNameEntities = new List(); + + public static void LoadDoaminAsset() + { + } + + public static void AddDomainNameEntity(DomainConfig domainName) + { + _domainNameEntities.Add(domainName); + } + + public static void AddDomainStaticNameEntity(DomainConfig domainName) + { + _domainStaticNameEntities.Add(domainName); + } + + public static void DeleteDomainNameEntity(DomainConfig domainName) + { + _domainNameEntities.Remove(domainName); + } + + public static void DeleteDomainStaticNameEntity(DomainConfig domainName) + { + _domainStaticNameEntities.Remove(domainName); + } + + public static async UniTask LoadDomainPrefab(DomainConfig domainConfig) + { + var package = YooAssets.GetPackage(domainConfig.domain); + // 加载热更资源 + var loadOperation = package.LoadAssetAsync(domainConfig.mainPrefab); + + await loadOperation; + if (loadOperation.Status == EOperationStatus.Succeed) + { + var gameObject = loadOperation.InstantiateSync(); + gameObject.name = domainConfig.domain; + return gameObject; + } + else + { + Debug.LogErrorFormat("加载热更资源失败,资源路径为--【{0}】--", loadOperation.LastError); + throw new System.Exception(loadOperation.LastError); + } + } + + public static async UniTask SetTransformInfo(GameObject gameObject) + { + LocalTransformInfo info = gameObject.GetOrAddComponent(); + + if (info._list.Count >= 2) + { + if (_openDomainType == OpenDomainType.PointCloud) + { + info.Switch(1); + } + else if (_openDomainType == OpenDomainType.VIOICE) + { + info.Switch(0); + } + else if (_openDomainType == OpenDomainType.ImageTracked) + { + info.transform.position = _transformCtor.position; + info.transform.rotation = Quaternion.Euler(_transformCtor.rotation); + info.transform.localScale = _transformCtor.scale; + } + else + { + info.Switch(0); + } + } + else + { + Debug.LogError($"UnityEvo:{gameObject.name}的TransformInfo长度小于2,无法继续运行,请排查"); + } + } + + public static async UniTask BindableProperty(DomainConfig domainConfig, GameObject gameObject, Type type) + { + DomainBase hotfixInstance = gameObject.GetComponent(type) as DomainBase; + if (hotfixInstance == null) + { + hotfixInstance = gameObject.AddComponent(type) as DomainBase; + } + + if (hotfixInstance == null) + { + Debug.LogError($"热更类{type.Name}实例创建失败!必须继承MonoBehaviour"); + return; + } + + hotfixInstance.DomainName = domainConfig.domain; + hotfixInstance.DomainNameRaw = $"{domainConfig.domain}_RawFile"; + + + // 原有调用逻辑修改为使用实例 + hotfixInstance.OnEnter(""); + hotfixInstance.OnEnterAsync(""); + } + + public static async UniTask UnloadDomainAsset() + { + foreach (var entity in _domainNameEntities) + { + if (HybridClREntrance.Global.stage == StageType.Developer) + { + var mainPrefab = GameObject.Find(entity.domain); + if (mainPrefab == null) + { + Debug.LogError($"UnityEvo:{entity.domain}不存在,无法卸载"); + return; + } + + DomainBase domainBase = mainPrefab.GetOrAddComponent(); + if (domainBase == null) + { + Debug.LogError($"UnityEvo:{mainPrefab.name}的DomainBase为空,无法退出,请排查"); + } + else + { + domainBase.OnExit(); + await domainBase.OnExitAsync(); + + GameObject.Destroy(domainBase.gameObject); + + await ForceUnloadAllAssets(domainBase.DomainName); + await ForceUnloadAllAssets(domainBase.DomainNameRaw); + } + + Debug.Log($"UnityEvo:{entity.domain} 退出成功..."); + } + else if (HybridClREntrance.Global.stage == StageType.Originality) + { + await ForceUnloadAllAssets(entity.domain); + AppConfig.PackageDomainName = ""; + Debug.Log("UnityEvo:Domain退出..."); + } + } + } + + public static async UniTask UnloadSceneAsset(DomainConfig config) + { + if (config.loadResType == DomainConfig.LoadResType.Scene) + { + string sceneName = config.sceneIdentifier; + if (sceneName == "") + { + Debug.LogError($"UnityEvo:{config.domain} 未配置场景名称,无法卸载"); + return; + } + + // 匹配开头到下划线的所有内容,替换为空 + sceneName = Regex.Replace(sceneName, @"^[^_]*_", ""); + await SceneManager.UnloadSceneAsync(sceneName); + await ForceUnloadAllAssets(config.domain); + AppConfig.PackageDomainName = ""; + Debug.Log("UnityEvo:Domain退出..."); + } + } + + // 强制卸载所有资源包,该方法请在合适的时机调用。 + // 注意:Package在销毁的时候也会自动调用该方法。 + private static async UniTask ForceUnloadAllAssets(string packageName) + { + var package = YooAssets.TryGetPackage(packageName); + if (package != null && package.InitializeStatus == EOperationStatus.Succeed) + { + var operation = package.UnloadAllAssetsAsync(); + await operation; + await package.DestroyAsync(); + YooAssets.RemovePackage(packageName); + + Resources.UnloadUnusedAssets(); + GC.Collect(); + GC.WaitForPendingFinalizers(); + Debug.Log($"UnityEvo:{packageName} 资源包已卸载..."); + } + else + { + Debug.LogWarning($"UnityEvo:{packageName} 资源包不存在,请检查是否已经卸载还是卸载异常..."); + } + } + + public void Dispose() + { + foreach (var entity in _domainStaticNameEntities) + { + DeleteDomainStaticNameEntity(entity); + } + + _domainStaticNameEntities.Clear(); + foreach (var entity in _domainNameEntities) + { + DeleteDomainNameEntity(entity); + } + + _domainNameEntities.Clear(); + + if (ProgressBarPanel != null) + { + GameObject.Destroy(ProgressBarPanel); + } + } + + public static void SetOpenDomainType(OpenDomainType type) + { + _openDomainType = type; + } + + + public static void SetTransformCtor(Transform transform) + { + _transformCtor = transform.GetTransformCtor(); + } + + public static void SetTransformCtor(TransformCtor transformCtor) + { + transformCtor = transformCtor; + } + } +} \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/DomainAssetSystem.cs.meta b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/DomainAssetSystem.cs.meta new file mode 100644 index 0000000..896d1aa --- /dev/null +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/DomainAssetSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4ce99f5715d04b79accf946894f192eb +timeCreated: 1775976286 \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/FsmLoadSystem.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/FsmLoadSystem.cs deleted file mode 100644 index 9e13841..0000000 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/FsmLoadSystem.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using Cysharp.Threading.Tasks; -using Main; -using UnityEngine; -using YooAsset; - -namespace Stary.Evo -{ - public class FsmLoadSystem : FsmSystemAsync , IFsmSystemAsync - { - private OpenDomainType OpenDomainType { get; set; } - - private TransformCtor transformCtor; - - public ProgressBarPanel ProgressBarPanel { get; set; } - - public bool IsLogin = false; - public void SetOpenDomainType(OpenDomainType type) - { - this.OpenDomainType = type; - } - public void SetTransformCtor(Transform transform) - { - this.transformCtor = transform.GetTransformCtor(); - } - public void SetTransformCtor(TransformCtor transformCtor) - { - this.transformCtor = transformCtor; - } - public OpenDomainType GetOpenDomainType() - { - return this.OpenDomainType; - } - - public TransformCtor GetTransformCtor() - { - return this.transformCtor; - } - - // 强制卸载所有资源包,该方法请在合适的时机调用。 - // 注意:Package在销毁的时候也会自动调用该方法。 - public async UniTask ForceUnloadAllAssets(string packageName) - { - var package = YooAssets.TryGetPackage(packageName); - if (package != null&&package.InitializeStatus == EOperationStatus.Succeed) - { - var operation = package.UnloadAllAssetsAsync(); - await operation; - await package.DestroyAsync(); - YooAssets.RemovePackage(packageName); - - Resources.UnloadUnusedAssets(); - GC.Collect(); - GC.WaitForPendingFinalizers(); - Debug.Log($"UnityEvo:{packageName} 资源包已卸载..."); - } - else - { - Debug.LogWarning($"UnityEvo:{packageName} 资源包不存在,请检查是否已经卸载还是卸载异常..."); - } - } - } -} \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/FsmLoadSystem.cs.meta b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/FsmLoadSystem.cs.meta deleted file mode 100644 index 03813f4..0000000 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/FsmLoadSystem.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1f012ae5832b467a802b8d775b1dae1e -timeCreated: 1744710396 \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixDllState.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixDllState.cs index d28b6cc..9124bd3 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixDllState.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixDllState.cs @@ -235,11 +235,6 @@ namespace Stary.Evo return UniTask.CompletedTask; } - public override UniTask OnEnterAsync(T1 param1, T2 param2) - { - return UniTask.CompletedTask; - } - private Type IsAssetLoaded(string assemblyName) { var assemblies = AppDomain.CurrentDomain.GetAssemblies(); @@ -256,10 +251,6 @@ namespace Stary.Evo return null; } - public override void OnUpdate() - { - base.OnUpdate(); - } public override UniTask OnExitAsync() { diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixStartState.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixStartState.cs index 56b567d..5529841 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixStartState.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixStartState.cs @@ -50,7 +50,7 @@ namespace Stary.Evo await FsmSystem.SetCurState(nameof(ResEditorSimulateState)); #elif HOST_PLAYMODE //登录 - if (((FsmLoadSystem)FsmSystem).IsLogin) + if ((AppConfig.IsLogin)) { await GetServerVersion(); await HOST_PLAYMODE(package); @@ -99,16 +99,6 @@ namespace Stary.Evo #endif } - public override UniTask OnEnterAsync(T param) - { - return UniTask.CompletedTask; - } - - public override UniTask OnEnterAsync(T1 param1, T2 param2) - { - return UniTask.CompletedTask; - } - public override UniTask OnExitAsync() { return UniTask.CompletedTask; @@ -431,11 +421,9 @@ namespace Stary.Evo // // 等一帧,让系统真正释放句柄 // await UniTask.DelayFrame(1); // } - - FsmLoadSystem loadSystem = FsmSystem as FsmLoadSystem; - if (loadSystem != null && loadSystem.ProgressBarPanel == null) + if (DomainAssetSystem.ProgressBarPanel == null) { - loadSystem.ProgressBarPanel = Object.Instantiate(Resources.Load("ProgressBarPanel"), + DomainAssetSystem.ProgressBarPanel = Object.Instantiate(Resources.Load("ProgressBarPanel"), Camera.main.transform).GetOrAddComponent(); } @@ -445,17 +433,15 @@ namespace Stary.Evo private void DownLoadProgress(float progress) { Debug.Log($"下载进度:{progress:P0}"); - FsmLoadSystem loadSystem = FsmSystem as FsmLoadSystem; - if (loadSystem != null) - loadSystem.ProgressBarPanel.SetProgressBarValue("下载中", progress); + + DomainAssetSystem.ProgressBarPanel.SetProgressBarValue("下载中", progress); } private void UnzipProgress(float progress) { Debug.Log($"解压进度:{progress:P0}"); - FsmLoadSystem loadSystem = FsmSystem as FsmLoadSystem; - if (loadSystem != null) - loadSystem.ProgressBarPanel.SetProgressBarValue("解压中", progress); + + DomainAssetSystem.ProgressBarPanel.SetProgressBarValue("解压中", progress); } #endregion diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResEditorSimulateState.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResEditorSimulateState.cs index 4da70a4..7fdbfee 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResEditorSimulateState.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResEditorSimulateState.cs @@ -111,20 +111,6 @@ namespace Stary.Evo } } - public override UniTask OnEnterAsync(T param) - { - return UniTask.CompletedTask; - } - - public override UniTask OnEnterAsync(T1 param1, T2 param2) - { - return UniTask.CompletedTask; - } - - public override void OnUpdate() - { - base.OnUpdate(); - } public override UniTask OnExitAsync() diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResStartState.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResStartState.cs index cee9dcb..9f123ba 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResStartState.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResStartState.cs @@ -1,9 +1,5 @@ using System; using Cysharp.Threading.Tasks; - -#if Immersal -using Immersal.AR; -#endif using Stary.Evo; using Stary.Evo.InformationSave; using UnityEngine; @@ -14,45 +10,41 @@ namespace Stary.Evo { public class ResStartState : AbstractFSMIStateAsync { - private DomainConfig.LoadResType loadResType; - public GameObject mainPrefab; private DomainConfig domainConfig; - private string _packageName; - private string _sceneName; public ResStartState(IFsmSystemAsync system) : base(system) { } - public override UniTask OnEnterAsync() { return UniTask.CompletedTask; } - public override UniTask OnEnterAsync(T param) - { - return UniTask.CompletedTask; - } - public override async UniTask OnEnterAsync(T1 param1, T2 param2) { if (AppConfig.DeveloperMode) { domainConfig = param1 as DomainConfig; - loadResType = domainConfig.loadResType; - _packageName = domainConfig.domain; Type type = param2 as Type; - var package = YooAssets.GetPackage(domainConfig.domain); - switch (loadResType) + + GameObject mainPrefab = null; + switch (domainConfig.loadResType) { case DomainConfig.LoadResType.Prefab: - - await LoadDomainPrefab(package); - + mainPrefab = await DomainAssetSystem.LoadDomainPrefab(domainConfig); + await DomainAssetSystem.SetTransformInfo(mainPrefab); + if (domainConfig.domainLoadType != DomainConfig.DomainLoadType.Static) + { + DomainAssetSystem.AddDomainNameEntity(domainConfig); + } + else + { + DomainAssetSystem.AddDomainStaticNameEntity(domainConfig); + } break; case DomainConfig.LoadResType.Scene: - + var package = YooAssets.GetPackage(domainConfig.domain); var sceneMode = domainConfig.loadSceneMode; var physicsMode = LocalPhysicsMode.None; SceneHandle handle = @@ -60,142 +52,28 @@ namespace Stary.Evo await handle; Scene targetScene = SceneManager.GetSceneByName(handle.SceneName); - // targetScene.name = domainConfig.mainScene; - // 设置为 active scene 或者后续 Move 到该 scene SceneManager.SetActiveScene(targetScene); - _sceneName = targetScene.name; - mainPrefab = GameObject.Find(domainConfig.mainPrefab); - if (mainPrefab == null) - { - await LoadDomainPrefab(package); - } - + mainPrefab = await DomainAssetSystem.LoadDomainPrefab(domainConfig); + SceneManager.MoveGameObjectToScene(mainPrefab, targetScene); break; } - if (domainConfig.domain != "Main") - { - LocalTransformInfo info = mainPrefab.GetOrAddComponent(); - FsmLoadSystem fsmLoadSystem = FsmSystem as FsmLoadSystem; - if (info._list.Count >= 2) - { - if (fsmLoadSystem.GetOpenDomainType() == OpenDomainType.PointCloud) - { - info.Switch(1); - } - else if (fsmLoadSystem.GetOpenDomainType() == OpenDomainType.VIOICE) - { - info.Switch(0); - } - else if (fsmLoadSystem.GetOpenDomainType() == OpenDomainType.ImageTracked) - { - info.transform.position = fsmLoadSystem.GetTransformCtor().position; - info.transform.rotation = Quaternion.Euler(fsmLoadSystem.GetTransformCtor().rotation); - info.transform.localScale = fsmLoadSystem.GetTransformCtor().scale; - } - else - { - info.Switch(0); - } - } - else - { - Debug.LogError($"UnityEvo:{mainPrefab.name}的TransformInfo长度小于2,无法继续运行,请排查"); - } - } - - if (mainPrefab != null) - { - DomainBase hotfixInstance = mainPrefab.GetComponent(type) as DomainBase; - if (hotfixInstance == null) - { - hotfixInstance = mainPrefab.AddComponent(type) as DomainBase; - } - - if (hotfixInstance == null) - { - Debug.LogError($"热更类{type.Name}实例创建失败!必须继承MonoBehaviour"); - return; - } - - hotfixInstance.DomainName = domainConfig.domain; - hotfixInstance.DomainNameRaw = $"{domainConfig.domain}_RawFile"; - - - // 原有调用逻辑修改为使用实例 - hotfixInstance.OnEnter(""); - hotfixInstance.OnEnterAsync(""); - } - } - else - { - _packageName = AppConfig.PackageDomainName; + await DomainAssetSystem.BindableProperty(domainConfig, mainPrefab, type); } } - private async UniTask LoadDomainPrefab(ResourcePackage package) - { - // 加载热更资源 - var loadOperation = package.LoadAssetAsync(domainConfig.mainPrefab); - - await loadOperation; - if (loadOperation.Status == EOperationStatus.Succeed) - { -#if Immersal - ARSpace arSpace = GameObject.FindObjectOfType(); - if (arSpace != null) - { - Debug.Log("UnityEvo:找到ARSpace,开始加载点云运行环境..."); - mainPrefab = loadOperation.InstantiateSync(arSpace.transform); - } else - { - Debug.Log("UnityEvo:未找到ARSpace,开始加载普通运行环境,通过语音唤醒..."); - mainPrefab = loadOperation.InstantiateSync(); - } -#elif NotPointClond - mainPrefab = loadOperation.InstantiateSync(); -#endif - if (domainConfig.domain == "Main") - AppConfig.SetDefaultMainInstance(mainPrefab); - } - } public override async UniTask OnExitAsync() { - if (_packageName=="Main") - return; - - if (HybridClREntrance.Global.stage == StageType.Developer) + if (domainConfig.loadResType == DomainConfig.LoadResType.Prefab && + domainConfig.domainLoadType == DomainConfig.DomainLoadType.Single) { - DomainBase domainBase = mainPrefab.GetOrAddComponent(); - if (domainBase == null) - { - Debug.LogError($"UnityEvo:{mainPrefab.name}的DomainBase为空,无法退出,请排查"); - } - else - { - domainBase.OnExit(); - await domainBase.OnExitAsync(); - - GameObject.Destroy(domainBase.gameObject); - - await ((FsmLoadSystem)FsmSystem).ForceUnloadAllAssets(domainBase.DomainName); - await ((FsmLoadSystem)FsmSystem).ForceUnloadAllAssets(domainBase.DomainNameRaw); - } - - Debug.Log("UnityEvo:Domain退出..."); - - if (loadResType == DomainConfig.LoadResType.Scene) - { - await SceneManager.UnloadSceneAsync(_sceneName); - } + await DomainAssetSystem.UnloadDomainAsset(); } - else if (HybridClREntrance.Global.stage == StageType.Originality) + else if (domainConfig.loadResType == DomainConfig.LoadResType.Scene) { - await ((FsmLoadSystem)FsmSystem).ForceUnloadAllAssets(_packageName); - AppConfig.PackageDomainName = ""; - Debug.Log("UnityEvo:Domain退出..."); + await DomainAssetSystem.UnloadSceneAsset(domainConfig); } } } diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/HybridClREntrance.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/HybridClREntrance.cs index 9644443..de90ec5 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/HybridClREntrance.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/HybridClREntrance.cs @@ -9,7 +9,7 @@ namespace Stary.Evo public StageType stage; public string domain; - private FsmLoadSystem _loadSystem; + private IFsmSystemAsync _loadSystem; /// @@ -30,7 +30,7 @@ namespace Stary.Evo return; } - _loadSystem = new FsmLoadSystem(); + _loadSystem = new FsmSystemAsync(); // 初始化日志 _loadSystem.AddState(new HotFixStartState(_loadSystem)); _loadSystem.AddState(new ResEditorSimulateState(_loadSystem)); @@ -51,7 +51,7 @@ namespace Stary.Evo Debug.Log($"UnityEvo:读取资源配置表成功...{AppConfig.IpConfig}{AppConfig.UserName}{AppConfig.PassWord}"); //登录 string url = AppConfig.IpConfig + "/Authentication/login"; - _loadSystem.IsLogin = await WebRequestSystem.Login(url, AppConfig.UserName, AppConfig.PassWord); + AppConfig.IsLogin = await WebRequestSystem.Login(url, AppConfig.UserName, AppConfig.PassWord); } private void Start() @@ -91,7 +91,7 @@ namespace Stary.Evo public async void OpenDomain(string domain, OpenDomainType openDomainType) { this.domain = domain; - _loadSystem.SetOpenDomainType(openDomainType); + DomainAssetSystem.SetOpenDomainType(openDomainType); if (this.domain != AppConfig.PackageDomainName) { AppConfig.PackageDomainName = domain; @@ -106,8 +106,8 @@ namespace Stary.Evo public void OpenDomain(string domain, TransformCtor transformCtor) { this.domain = domain; - _loadSystem.SetOpenDomainType(OpenDomainType.ImageTracked); - _loadSystem.SetTransformCtor(transformCtor); + DomainAssetSystem.SetOpenDomainType(OpenDomainType.ImageTracked); + DomainAssetSystem.SetTransformCtor(transformCtor); if (this.domain != AppConfig.PackageDomainName) { AppConfig.PackageDomainName = domain; @@ -122,8 +122,8 @@ namespace Stary.Evo public void OpenDomain(string domain, Transform transform) { this.domain = domain; - _loadSystem.SetOpenDomainType(OpenDomainType.ImageTracked); - _loadSystem.SetTransformCtor(transform); + DomainAssetSystem.SetOpenDomainType(OpenDomainType.ImageTracked); + DomainAssetSystem.SetTransformCtor(transform); if (this.domain != AppConfig.PackageDomainName) { AppConfig.PackageDomainName = domain; diff --git a/Assets/00.StaryEvoTools/Runtime/VideoSystemPanel/VideoSystem.cs b/Assets/00.StaryEvoTools/Runtime/VideoSystemPanel/VideoSystem.cs index 49820ec..ab89437 100644 --- a/Assets/00.StaryEvoTools/Runtime/VideoSystemPanel/VideoSystem.cs +++ b/Assets/00.StaryEvoTools/Runtime/VideoSystemPanel/VideoSystem.cs @@ -26,7 +26,7 @@ public class VideoSystem : AbstractSystem, IVideoSystem public async void PlayVideo(VideoPanel.VideoInfo info) { AudioCoreManager.SetMusicVolume(2f, 0f); - await this.GetSystem().PushQueue(parent:AppConfig.GetDefaultMainInstance().transform,packageName:"Main"); + await this.GetSystem().PushQueue(packageName:"Main"); this.GetSystem().SendPanelEvent(ModeType.VideoStart,info); } diff --git a/Assets/00.StaryEvoTools/package.json b/Assets/00.StaryEvoTools/package.json index 1698307..f0fad5e 100644 --- a/Assets/00.StaryEvoTools/package.json +++ b/Assets/00.StaryEvoTools/package.json @@ -1,6 +1,6 @@ { "name": "com.staryevo.tools", - "version": "1.3.36", + "version": "1.4.0", "displayName": "00.StaryEvo.Tools", "description": "This is an Framework package(后台服务器版本,端口9527)", "unity": "2021.3",