Merge pull request #59 from AlanWeekend/main

优化分包资源下载逻辑,统一WebGL平台与其他平台的远程热更资源引用方式
This commit is contained in:
ALEXTANG
2023-11-20 11:56:04 +08:00
committed by GitHub
4 changed files with 54 additions and 31 deletions

View File

@@ -29,7 +29,8 @@ namespace GameMain
private async UniTaskVoid InitPackage(ProcedureOwner procedureOwner) private async UniTaskVoid InitPackage(ProcedureOwner procedureOwner)
{ {
if (GameModule.Resource.PlayMode == EPlayMode.HostPlayMode) if (GameModule.Resource.PlayMode == EPlayMode.HostPlayMode ||
GameModule.Resource.PlayMode == EPlayMode.WebPlayMode)
{ {
if (SettingsUtils.EnableUpdateData()) if (SettingsUtils.EnableUpdateData())
{ {
@@ -44,7 +45,8 @@ namespace GameMain
if (!string.IsNullOrEmpty(updateData.FallbackHostServerURL)) if (!string.IsNullOrEmpty(updateData.FallbackHostServerURL))
{ {
SettingsUtils.FrameworkGlobalSettings.FallbackHostServerURL = updateData.FallbackHostServerURL; SettingsUtils.FrameworkGlobalSettings.FallbackHostServerURL =
updateData.FallbackHostServerURL;
} }
} }
} }
@@ -60,9 +62,9 @@ namespace GameMain
{ {
//热更新阶段文本初始化 //热更新阶段文本初始化
LoadText.Instance.InitConfigData(null); LoadText.Instance.InitConfigData(null);
GameEvent.Send(RuntimeId.ToRuntimeId("RefreshVersion")); GameEvent.Send(RuntimeId.ToRuntimeId("RefreshVersion"));
EPlayMode playMode = GameModule.Resource.PlayMode; EPlayMode playMode = GameModule.Resource.PlayMode;
// 编辑器模式。 // 编辑器模式。
@@ -107,7 +109,9 @@ namespace GameMain
// 打开启动UI。 // 打开启动UI。
UILoadMgr.Show(UIDefine.UILoadUpdate, $"资源初始化失败!"); UILoadMgr.Show(UIDefine.UILoadUpdate, $"资源初始化失败!");
UILoadTip.ShowMessageBox($"资源初始化失败!点击确认重试 \n \n <color=#FF0000>原因{initializationOperation.Error}</color>", MessageShowType.TwoButton, UILoadTip.ShowMessageBox(
$"资源初始化失败!点击确认重试 \n \n <color=#FF0000>原因{initializationOperation.Error}</color>",
MessageShowType.TwoButton,
LoadStyle.StyleEnum.Style_Retry LoadStyle.StyleEnum.Style_Retry
, () => { Retry(procedureOwner); }, UnityEngine.Application.Quit); , () => { Retry(procedureOwner); }, UnityEngine.Application.Quit);
} }

View File

@@ -10,18 +10,6 @@ namespace TEngine
public const string RootFolderName = "yoo"; public const string RootFolderName = "yoo";
} }
/// <summary>
/// 内置文件查询服务类。
/// </summary>
public class BuiltinQueryServices : IBuildinQueryServices
{
public bool QueryStreamingAssets(string packageName, string fileName)
{
// 注意fileName包含文件格式
return BuiltinQueryMgr.FileExists(packageName, fileName);
}
}
#if UNITY_EDITOR #if UNITY_EDITOR
/// <summary> /// <summary>
/// 内置资源资源查询帮助类。 /// 内置资源资源查询帮助类。

View File

@@ -12,7 +12,7 @@ namespace TEngine
private class GameDecryptionServices : IDecryptionServices private class GameDecryptionServices : IDecryptionServices
{ {
private const byte OffSet = 32; private const byte OffSet = 32;
public ulong LoadFromFileOffset(DecryptFileInfo fileInfo) public ulong LoadFromFileOffset(DecryptFileInfo fileInfo)
{ {
return OffSet; return OffSet;
@@ -25,7 +25,8 @@ namespace TEngine
public Stream LoadFromStream(DecryptFileInfo fileInfo) public Stream LoadFromStream(DecryptFileInfo fileInfo)
{ {
BundleStream bundleStream = new BundleStream(fileInfo.FilePath, FileMode.Open, FileAccess.Read, FileShare.Read); BundleStream bundleStream =
new BundleStream(fileInfo.FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
return bundleStream; return bundleStream;
} }
@@ -34,7 +35,7 @@ namespace TEngine
return 1024; return 1024;
} }
} }
/// <summary> /// <summary>
/// 默认的分发资源查询服务类 /// 默认的分发资源查询服务类
/// </summary> /// </summary>
@@ -44,40 +45,66 @@ namespace TEngine
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public bool QueryDeliveryFiles(string packageName, string fileName) public bool QueryDeliveryFiles(string packageName, string fileName)
{ {
return false; return false;
} }
} }
/// <summary> /// <summary>
/// 远程文件查询服务类。 /// 远程文件查询服务类。
/// </summary> /// </summary>
private class RemoteServices: IRemoteServices private class RemoteServices : IRemoteServices
{ {
private readonly string _defaultHostServer; private readonly string _defaultHostServer;
private readonly string _fallbackHostServer; private readonly string _fallbackHostServer;
private string _packageName;
public RemoteServices() public RemoteServices(string packageName)
{ {
_defaultHostServer = SettingsUtils.FrameworkGlobalSettings.HostServerURL; _defaultHostServer = SettingsUtils.FrameworkGlobalSettings.HostServerURL;
_fallbackHostServer = SettingsUtils.FrameworkGlobalSettings.FallbackHostServerURL; _fallbackHostServer = SettingsUtils.FrameworkGlobalSettings.FallbackHostServerURL;
_packageName = packageName;
} }
public RemoteServices(string defaultHostServer, string fallbackHostServer) public RemoteServices(string defaultHostServer, string fallbackHostServer)
{ {
_defaultHostServer = defaultHostServer; _defaultHostServer = defaultHostServer;
_fallbackHostServer = fallbackHostServer; _fallbackHostServer = fallbackHostServer;
} }
public string GetRemoteMainURL(string fileName) public string GetRemoteMainURL(string fileName)
{ {
return $"{_defaultHostServer}/{fileName}"; return $"{_defaultHostServer}/{_packageName}/{fileName}";
} }
public string GetRemoteFallbackURL(string fileName) public string GetRemoteFallbackURL(string fileName)
{ {
return $"{_fallbackHostServer}/{fileName}"; return $"{_defaultHostServer}/{_packageName}/{fileName}";
}
}
/// <summary>
/// 内置文件查询服务类。
/// </summary>
public class BuiltinQueryServices : IBuildinQueryServices
{
public bool QueryStreamingAssets(string packageName, string fileName)
{
// 注意fileName包含文件格式
return BuiltinQueryMgr.FileExists(packageName, fileName);
}
}
/// <summary>
/// WebGL内置文件查询服务类。WebGL平台不需要内置查询直接使用远程热更资源。
/// </summary>
public class WebGLBuiltinQueryServices : IBuildinQueryServices
{
public bool QueryStreamingAssets(string packageName, string fileName)
{
return true;
} }
} }
} }
@@ -86,7 +113,8 @@ namespace TEngine
{ {
public const byte KEY = 128; public const byte KEY = 128;
public BundleStream(string path, FileMode mode, FileAccess access, FileShare share) : base(path, mode, access, share) public BundleStream(string path, FileMode mode, FileAccess access, FileShare share) : base(path, mode, access,
share)
{ {
} }

View File

@@ -384,7 +384,7 @@ namespace TEngine
createParameters.DecryptionServices = new GameDecryptionServices(); createParameters.DecryptionServices = new GameDecryptionServices();
createParameters.BuildinQueryServices = new BuiltinQueryServices(); createParameters.BuildinQueryServices = new BuiltinQueryServices();
createParameters.DeliveryQueryServices = new DefaultDeliveryQueryServices(); createParameters.DeliveryQueryServices = new DefaultDeliveryQueryServices();
createParameters.RemoteServices = new RemoteServices(); createParameters.RemoteServices = new RemoteServices(targetPackageName);
initializationOperation = package.InitializeAsync(createParameters); initializationOperation = package.InitializeAsync(createParameters);
} }
@@ -394,8 +394,11 @@ namespace TEngine
YooAssets.SetCacheSystemDisableCacheOnWebGL(); YooAssets.SetCacheSystemDisableCacheOnWebGL();
var createParameters = new WebPlayModeParameters(); var createParameters = new WebPlayModeParameters();
createParameters.DecryptionServices = new GameDecryptionServices(); createParameters.DecryptionServices = new GameDecryptionServices();
createParameters.BuildinQueryServices = new BuiltinQueryServices(); createParameters.BuildinQueryServices = new WebGLBuiltinQueryServices();
createParameters.RemoteServices = new RemoteServices(); createParameters.RemoteServices = new RemoteServices(targetPackageName);
// WebGL运行模式下直接使用远程热更资源。
createParameters.BuildinRootDirectory = SettingsUtils.FrameworkGlobalSettings.HostServerURL;
createParameters.SandboxRootDirectory = SettingsUtils.FrameworkGlobalSettings.HostServerURL;
initializationOperation = package.InitializeAsync(createParameters); initializationOperation = package.InitializeAsync(createParameters);
} }