This commit is contained in:
2025-09-02 14:15:18 +08:00
parent 796c8d845d
commit 8872c20cf2
34 changed files with 2024 additions and 695 deletions

View File

@@ -5,6 +5,7 @@ namespace Stary.Evo
{
public class AppConfig
{
public static OpenDomainType OpenDomainType { get; set; }
/// <summary>
/// package name
/// </summary>

View File

@@ -14,10 +14,10 @@ namespace Stary.Evo
/// </summary>
public class DomainBase : MonoBehaviour
{
public string DomainName { protected get; set; }
public string DomainName { get; set; }
public Transform TransformInfo;
protected bool isExit { private get; set; }
/// <summary>
/// 触发Domain时调用该方法
@@ -35,7 +35,6 @@ namespace Stary.Evo
/// <param name="param"></param>
public virtual void OnExit()
{
isExit = true;
AudioCoreManager.StopMusic();
}
@@ -44,7 +43,6 @@ namespace Stary.Evo
public virtual async Task OnEnterAsync(string param)
{
isExit = true;
}
public virtual Task OnExitAsync()
@@ -52,32 +50,11 @@ namespace Stary.Evo
return Task.CompletedTask;
}
private async void OnDestroy()
{
await ForceUnloadAllAssets();
}
// private async void OnDestroy()
// {
// await ForceUnloadAllAssets();
// }
// 强制卸载所有资源包,该方法请在合适的时机调用。
// 注意Package在销毁的时候也会自动调用该方法。
private async UniTask ForceUnloadAllAssets()
{
var package = YooAssets.TryGetPackage(DomainName);
if (package != null)
{
var operation = package.UnloadAllAssetsAsync();
await operation;
await package.DestroyAsync();
YooAssets.RemovePackage(DomainName);
Resources.UnloadUnusedAssets();
GC.Collect();
GC.WaitForPendingFinalizers();
Debug.Log($"UnityEvo:{DomainName} 资源包已卸载...");
}
else
{
Debug.LogWarning($"UnityEvo:{DomainName} 资源包不存在,请检查是否已经卸载还是卸载异常...");
}
}
}
}

View File

@@ -2,7 +2,7 @@
namespace Stary.Evo
{
public class FsmLoadSystem : FsmSystem , IFsmSystem
public class FsmLoadSystem : FsmSystemAsync , IFsmSystemAsync
{
private OpenDomainType OpenDomainType { get; set; }

View File

@@ -9,7 +9,7 @@ using YooAsset;
namespace Stary.Evo
{
public class HotFixState : AbstractFSMIState
public class HotFixState : AbstractFSMIStateAsync
{
public string[] PatchedAOTAssemblyList = new string[]
{
@@ -24,7 +24,7 @@ namespace Stary.Evo
"com.stary.evo.runtime.dll"
};
public HotFixState(IFsmSystem system) : base(system)
public HotFixState(IFsmSystemAsync system) : base(system)
{
}

View File

@@ -5,11 +5,11 @@ using YooAsset;
namespace Stary.Evo
{
public class LoadResMainState : AbstractFSMIState
public class LoadResMainState : AbstractFSMIStateAsync
{
private string _doMain = "Main";
public LoadResMainState(IFsmSystem system) : base(system)
public LoadResMainState(IFsmSystemAsync system) : base(system)
{
}

View File

@@ -9,12 +9,12 @@ using YooAsset;
namespace Stary.Evo
{
public class LoadResState : AbstractFSMIState
public class LoadResState : AbstractFSMIStateAsync
{
private DomainConfig.LoadResType loadResType;
public GameObject mainPrefab;
private DomainConfig domainConfig;
public LoadResState(IFsmSystem system) : base(system)
public LoadResState(IFsmSystemAsync system) : base(system)
{
}
@@ -73,13 +73,17 @@ namespace Stary.Evo
if (info._list.Count >= 2)
{
if (fsmLoadSystem.GetOpenDomainType() == OpenDomainType.DEFAULT)
if (fsmLoadSystem.GetOpenDomainType() == OpenDomainType.PointCloud)
{
info.Switch(0);
info.Switch(1);
}
else if (fsmLoadSystem.GetOpenDomainType() == OpenDomainType.VIOICE)
{
info.Switch(1);
info.Switch(0);
}
else if (fsmLoadSystem.GetOpenDomainType() == OpenDomainType.ImageTracked)
{
info.Switch(2);
}
}
else
@@ -137,7 +141,35 @@ namespace Stary.Evo
}
if (domainBase != null)
{
GameObject.Destroy(domainBase.gameObject);
await ForceUnloadAllAssets(domainBase.DomainName);
}
}
}
// 强制卸载所有资源包,该方法请在合适的时机调用。
// 注意Package在销毁的时候也会自动调用该方法。
private async UniTask ForceUnloadAllAssets(string packageName)
{
var package = YooAssets.TryGetPackage(packageName);
if (package != null)
{
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} 资源包不存在,请检查是否已经卸载还是卸载异常...");
}
}
}

View File

@@ -13,9 +13,9 @@ using Object = UnityEngine.Object;
namespace Stary.Evo
{
public class ResStartState : AbstractFSMIState
public class ResStartState : AbstractFSMIStateAsync
{
public ResStartState(IFsmSystem system) : base(system)
public ResStartState(IFsmSystemAsync system) : base(system)
{
}

View File

@@ -5,9 +5,9 @@ using YooAsset;
namespace Stary.Evo
{
public class ResUpdateLocalState : AbstractFSMIState
public class ResUpdateLocalState : AbstractFSMIStateAsync
{
public ResUpdateLocalState(IFsmSystem system) : base(system)
public ResUpdateLocalState(IFsmSystemAsync system) : base(system)
{
}

View File

@@ -5,9 +5,9 @@ using YooAsset;
namespace Stary.Evo
{
public class ResUpdateServerState : AbstractFSMIState
public class ResUpdateServerState : AbstractFSMIStateAsync
{
public ResUpdateServerState(IFsmSystem system) : base(system)
public ResUpdateServerState(IFsmSystemAsync system) : base(system)
{
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using Immersal;
using Sirenix.OdinInspector;
using Stary.Evo;
using UnityEngine;
@@ -28,8 +29,11 @@ namespace Stary.Evo
{
#if !UNITY_EDITOR
domain = "Main";
#elif UNITY_EDITOR
var immersalSDK = FindObjectOfType<ImmersalSDK>();
immersalSDK.onPoseFound.Invoke();
#endif
_fsmSystem.SetOpenDomainType(OpenDomainType.DEFAULT);
AppConfig.PackageDomainName = domain;
_fsmSystem.SetCurState(nameof(ResStartState));
}
@@ -46,15 +50,21 @@ namespace Stary.Evo
AppConfig.PackageDomainName = domain;
_fsmSystem.SetCurState(nameof(ResStartState));
}
public void OpenDomain(string domain, string openDomainType)
{
_fsmSystem.SetOpenDomainType((OpenDomainType)Enum.Parse(typeof(OpenDomainType), openDomainType));
AppConfig.PackageDomainName = domain;
_fsmSystem.SetCurState(nameof(ResStartState));
}
public void CloseDomain()
{
_fsmSystem.SetCurState(nameof(DefaultState));
_fsmSystem.SetCurState(nameof(DefaultStateAsync));
}
private void Update()
{
if(_fsmSystem.CurState != null)
_fsmSystem.CurState.OnUpdate();
}
}
@@ -66,7 +76,9 @@ namespace Stary.Evo
/// </summary>
public enum OpenDomainType
{
DEFAULT,
VIOICE
PointCloud,
VIOICE,
Editor,
ImageTracked,
}
}