117 lines
4.3 KiB
C#
117 lines
4.3 KiB
C#
using Cysharp.Threading.Tasks;
|
||
using PhxhSDK.AOT.VersionUpdate;
|
||
using UnityEngine;
|
||
using YooAsset;
|
||
namespace PhxhSDK.AOT
|
||
{
|
||
public class YooAssetHelper
|
||
{
|
||
public static ResourcePackage defaultPackage;
|
||
public static ResourcePackage rawPackage;
|
||
|
||
public static async UniTask Init()
|
||
{
|
||
if (defaultPackage != null) return;
|
||
// 初始化资源系统
|
||
YooAssets.Initialize();
|
||
|
||
// 创建默认的资源包
|
||
defaultPackage = YooAssets.CreatePackage("DefaultPackage");
|
||
rawPackage = YooAssets.CreatePackage("RawPackage");
|
||
|
||
// 设置该资源包为默认的资源包,可以使用YooAssets相关加载接口加载该资源包内容。
|
||
YooAssets.SetDefaultPackage(defaultPackage);
|
||
|
||
#if UNITY_EDITOR
|
||
#if AB_DEBUG
|
||
await _InitRemote();
|
||
#else
|
||
await _InitEditor();
|
||
#endif
|
||
#else
|
||
await _InitRemote();
|
||
#endif
|
||
}
|
||
|
||
private static async UniTask<bool> _InitEditor()
|
||
{
|
||
Debug.Log("[LTRes]开始初始化编辑器模拟模式");
|
||
var initParametersDefault = new EditorSimulateModeParameters();
|
||
initParametersDefault.AutoDestroyAssetProvider = true;
|
||
initParametersDefault.SimulateManifestFilePath = EditorSimulateModeHelper.SimulateBuild(EDefaultBuildPipeline.BuiltinBuildPipeline, "DefaultPackage");
|
||
var op = defaultPackage.InitializeAsync(initParametersDefault);
|
||
await op.Task;
|
||
if (op.Status != EOperationStatus.Succeed)
|
||
{
|
||
Debug.LogError("[LTRes]初始化编辑器模拟模式失败");
|
||
return false;
|
||
}
|
||
var initParametersRaw = new EditorSimulateModeParameters();
|
||
initParametersRaw.AutoDestroyAssetProvider = true;
|
||
initParametersRaw.SimulateManifestFilePath = EditorSimulateModeHelper.SimulateBuild(EDefaultBuildPipeline.RawFileBuildPipeline, "RawPackage");
|
||
var op2 = rawPackage.InitializeAsync(initParametersRaw);
|
||
await op2.Task;
|
||
if (op2.Status != EOperationStatus.Succeed)
|
||
{
|
||
Debug.LogError("[LTRes]初始化编辑器模拟模式失败");
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
public static async UniTask InitEditor()
|
||
{
|
||
await _InitEditor();
|
||
}
|
||
|
||
private static async UniTask<bool> _InitRemote()
|
||
{
|
||
if (!_isInit)
|
||
{
|
||
_isInit = true;
|
||
await _InitPackage(defaultPackage, false);
|
||
await _InitPackage(rawPackage, true);
|
||
Debug.Log("[LTRes]InitializeAsync 完成");
|
||
}
|
||
else
|
||
{
|
||
Debug.Log("[LTRes]开始重新尝试初始化remote load");
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
private static bool _isInit = false;
|
||
private static async UniTask _InitPackage(ResourcePackage package, bool noEncrypt)
|
||
{
|
||
Debug.Log("开始初始化package:" + package);
|
||
var initParameters = new HostPlayModeParameters();
|
||
initParameters.AutoDestroyAssetProvider = true;
|
||
initParameters.BuildinQueryServices = new GameQueryServices();
|
||
// initParameters.DeliveryQueryServices = new GameDeliveryServices();
|
||
if (noEncrypt)
|
||
{
|
||
initParameters.DecryptionServices = new YooDecryptionNone();
|
||
}
|
||
else
|
||
{
|
||
initParameters.DecryptionServices = new YooDecryptionFS();
|
||
}
|
||
|
||
PackDataInst.CreateInst();
|
||
var workSpace = PackDataInst.inst.localInfo.workSpace;
|
||
var version = PackDataInst.inst.localInfo.version;
|
||
var buildTarget = PackDataInst.GetRuntimePlatform();
|
||
var serverUrl = PackDataInst.inst.localInfo.serverUrl;
|
||
var pathRoot = PackDataInst.inst.localInfo.pathRoot;
|
||
var hostPath = $"{serverUrl}/{pathRoot}/{workSpace}/{buildTarget}/{version}";
|
||
initParameters.RemoteServices = new LTRemoteServices(hostPath);
|
||
|
||
await package.InitializeAsync(initParameters).Task;
|
||
Debug.Log("初始化package结束:" + package);
|
||
}
|
||
|
||
|
||
}
|
||
}
|