1111
This commit is contained in:
@@ -5,6 +5,7 @@ namespace Stary.Evo
|
||||
{
|
||||
public class AppConfig
|
||||
{
|
||||
public static OpenDomainType OpenDomainType { get; set; }
|
||||
/// <summary>
|
||||
/// package name
|
||||
/// </summary>
|
||||
|
||||
@@ -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} 资源包不存在,请检查是否已经卸载还是卸载异常...");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace Stary.Evo
|
||||
{
|
||||
public class FsmLoadSystem : FsmSystem , IFsmSystem
|
||||
public class FsmLoadSystem : FsmSystemAsync , IFsmSystemAsync
|
||||
{
|
||||
private OpenDomainType OpenDomainType { get; set; }
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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} 资源包不存在,请检查是否已经卸载还是卸载异常...");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user