【m】修改核心框架

This commit is contained in:
zhangzheng
2026-01-08 12:25:29 +08:00
parent 05b1bc90ff
commit 02af92b86d
8 changed files with 305 additions and 270 deletions

View File

@@ -129,21 +129,28 @@ namespace Stary.Evo
{
var initParams = YooAssetFileSystem.HostInitializeParameter(package.PackageName);
// initParameters.CacheFileSystemParameters = cacheFileSystemParams;
var initOperation = package.InitializeAsync(initParams);
await initOperation;
if (initOperation.Status == EOperationStatus.Succeed)
try
{
Debug.Log("UnityEvo:从远程加载资源包,初始化成功!");
return true;
var initOperation = package.InitializeAsync(initParams);
await initOperation;
if (initOperation.Status == EOperationStatus.Succeed)
{
Debug.Log("UnityEvo:从远程加载资源包,初始化成功!");
return true;
}
else
{
Debug.LogWarning($"UnityEvo:从远程加载资源包,初始化失败:{initOperation.Error}");
}
}
else
catch (Exception e)
{
Debug.LogError($"UnityEvo:从远程加载资源包,初始化失败:{initOperation.Error}");
return false;
Debug.LogError($"UnityEvo:从远程加载资源包,初始化失败:{e}");
}
return false;
}
private async UniTask OFFLINE_PLAYMODE(ResourcePackage package)
@@ -156,19 +163,26 @@ namespace Stary.Evo
{
//Debug.Log("UnityEvo:网络连接不通畅,切换缓存加载!");
var initParams = YooAssetFileSystem.HostInitializeParameter(package.PackageName);
var initOperation = package.InitializeAsync(initParams);
await initOperation;
if (initOperation.Status == EOperationStatus.Succeed)
try
{
Debug.Log("UnityEvo:从本地缓存中资源包,初始化成功!");
return true;
var initOperation = package.InitializeAsync(initParams);
await initOperation;
if (initOperation.Status == EOperationStatus.Succeed)
{
Debug.Log("UnityEvo:从本地缓存中资源包,初始化成功!");
}
else
{
Debug.LogWarning($"UnityEvo:从本地缓存中资源包,初始化失败:{initOperation.Error}");
return false;
}
}
else
catch (Exception e)
{
Debug.LogError($"UnityEvo:从本地缓存中资源包,初始化失败:{initOperation.Error}");
return false;
Debug.LogError($"UnityEvo:从本地缓存中资源包,初始化失败:{e}");
}
return false;
var operation = package.RequestPackageVersionAsync();
await operation;
@@ -321,7 +335,7 @@ namespace Stary.Evo
{
//初始化读取资源配置表
var package = YooAssets.GetPackage(AppConfig.PackageDomainName);
if (AppConfig.PackageDomainName.Equals("Main") ||HybridClREntrance.Global.stage == StageType.Developer)
if (AppConfig.PackageDomainName.Equals("Main") || HybridClREntrance.Global.stage == StageType.Developer)
{
//加载热更配置文件
var loadHotfixSettingsOp = package.LoadAssetAsync<DomainConfig>("Config_DomainConfig");
@@ -380,12 +394,12 @@ namespace Stary.Evo
//string loadPath = Path.Combine(Application.temporaryCachePath, "DownloadedContent", AppConfig.PackageDomainName);
string loadPath = Path.Combine(Application.temporaryCachePath, "DownloadedContent");
//string loadPath = $"{Application.persistentDataPath}/DownloadedContent/{AppConfig.PackageDomainName}";
if (Directory.Exists(loadPath))
{
Directory.Delete(loadPath, true);
// 等一帧,让系统真正释放句柄
await UniTask.DelayFrame(1);
}
// if (Directory.Exists(loadPath))
// {
// Directory.Delete(loadPath, true);
// // 等一帧,让系统真正释放句柄
// await UniTask.DelayFrame(1);
// }
FsmLoadSystem loadSystem = FsmSystem as FsmLoadSystem;
if (loadSystem != null && loadSystem.ProgressBarPanel == null)

View File

@@ -60,7 +60,7 @@ namespace Stary.Evo
//4.下载补丁包
await Download();
if (HybridClREntrance.Global.stage == StageType.Developer)
if (AppConfig.DeveloperMode)
{
//加载热更配置文件
var loadHotfixSettingsOp = package.LoadAssetAsync<DomainConfig>("Config_DomainConfig");

View File

@@ -17,7 +17,7 @@ namespace Stary.Evo
private DomainConfig.LoadResType loadResType;
public GameObject mainPrefab;
private DomainConfig domainConfig;
private string _packageName;
private string _sceneName;
public ResStartState(IFsmSystemAsync system) : base(system)
@@ -37,93 +37,100 @@ namespace Stary.Evo
public override async UniTask OnEnterAsync<T1, T2>(T1 param1, T2 param2)
{
if (domainConfig == null && HybridClREntrance.Global.stage == StageType.Originality)
return;
domainConfig = param1 as DomainConfig;
loadResType = domainConfig.loadResType;
Type type = param2 as Type;
var package = YooAssets.GetPackage(domainConfig.domain);
switch (loadResType)
if (AppConfig.DeveloperMode)
{
case DomainConfig.LoadResType.Prefab:
await LoadDomainPrefab(package);
break;
case DomainConfig.LoadResType.Scene:
var sceneMode = domainConfig.loadSceneMode;
var physicsMode = LocalPhysicsMode.None;
SceneHandle handle = package.LoadSceneAsync(domainConfig.sceneIdentifier, sceneMode, physicsMode);
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);
}
break;
}
if (domainConfig.domain != "Main")
{
LocalTransformInfo info = mainPrefab.GetOrAddComponent<LocalTransformInfo>();
FsmLoadSystem fsmLoadSystem = FsmSystem as FsmLoadSystem;
if (info._list.Count >= 2)
domainConfig = param1 as DomainConfig;
loadResType = domainConfig.loadResType;
_packageName = domainConfig.domain;
Type type = param2 as Type;
var package = YooAssets.GetPackage(domainConfig.domain);
switch (loadResType)
{
if (fsmLoadSystem.GetOpenDomainType() == OpenDomainType.PointCloud)
case DomainConfig.LoadResType.Prefab:
await LoadDomainPrefab(package);
break;
case DomainConfig.LoadResType.Scene:
var sceneMode = domainConfig.loadSceneMode;
var physicsMode = LocalPhysicsMode.None;
SceneHandle handle =
package.LoadSceneAsync(domainConfig.sceneIdentifier, sceneMode, physicsMode);
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);
}
break;
}
if (domainConfig.domain != "Main")
{
LocalTransformInfo info = mainPrefab.GetOrAddComponent<LocalTransformInfo>();
FsmLoadSystem fsmLoadSystem = FsmSystem as FsmLoadSystem;
if (info._list.Count >= 2)
{
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;
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
{
info.Switch(0);
Debug.LogError($"UnityEvo:{mainPrefab.name}的TransformInfo长度小于2无法继续运行请排查");
}
}
else
if (mainPrefab != null)
{
Debug.LogError($"UnityEvo:{mainPrefab.name}的TransformInfo长度小于2无法继续运行请排查");
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("");
}
}
if (mainPrefab != null)
else
{
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("");
_packageName = AppConfig.PackageDomainName;
}
}
@@ -156,40 +163,39 @@ namespace Stary.Evo
public override async UniTask OnExitAsync()
{
Debug.Log("UnityEvo:Domain退出...");
if (_packageName=="Main")
return;
if (HybridClREntrance.Global.stage == StageType.Developer)
{
if (domainConfig.domain != "Main")
DomainBase domainBase = mainPrefab.GetOrAddComponent<DomainBase>();
if (domainBase == null)
{
DomainBase domainBase = mainPrefab.GetOrAddComponent<DomainBase>();
if (domainBase == null)
{
Debug.LogError($"UnityEvo:{mainPrefab.name}的DomainBase为空无法退出请排查");
}
else
{
domainBase.OnExit();
await domainBase.OnExitAsync();
}
Debug.LogError($"UnityEvo:{mainPrefab.name}的DomainBase为空无法退出请排查");
}
else
{
domainBase.OnExit();
await domainBase.OnExitAsync();
if (domainBase != null)
{
GameObject.Destroy(domainBase.gameObject);
GameObject.Destroy(domainBase.gameObject);
await ((FsmLoadSystem)FsmSystem).ForceUnloadAllAssets(domainBase.DomainName);
await ((FsmLoadSystem)FsmSystem).ForceUnloadAllAssets(domainBase.DomainNameRaw);
}
await ((FsmLoadSystem)FsmSystem).ForceUnloadAllAssets(domainBase.DomainName);
await ((FsmLoadSystem)FsmSystem).ForceUnloadAllAssets(domainBase.DomainNameRaw);
}
if (loadResType == DomainConfig.LoadResType.Scene)
{
await SceneManager.UnloadSceneAsync(_sceneName);
}
Debug.Log("UnityEvo:Domain退出...");
if (loadResType == DomainConfig.LoadResType.Scene)
{
await SceneManager.UnloadSceneAsync(_sceneName);
}
}
else if (HybridClREntrance.Global.stage == StageType.Originality)
{
await ((FsmLoadSystem)FsmSystem).ForceUnloadAllAssets(AppConfig.PackageDomainName);
await ((FsmLoadSystem)FsmSystem).ForceUnloadAllAssets(_packageName);
AppConfig.PackageDomainName = "";
Debug.Log("UnityEvo:Domain退出...");
}
}
}