From e26a2937a760b7c4ca245162bd7d2993cfe282bb Mon Sep 17 00:00:00 2001
From: xiaobo <965416680@qq.com>
Date: Mon, 16 Jun 2025 11:39:50 +0800
Subject: [PATCH] =?UTF-8?q?1=EF=BC=9A=E4=B8=80=E9=94=AE=E6=89=93=E5=8C=85a?=
=?UTF-8?q?b=E5=8C=85=EF=BC=9A=E6=96=B0=E5=A2=9E=E5=BF=AB=E6=8D=B7?=
=?UTF-8?q?=E9=94=AE=EF=BC=8C=E6=9A=82=E5=AE=9Af8=E3=80=82=E8=87=AA?=
=?UTF-8?q?=E5=8A=A8=E7=94=9F=E6=88=90dll,=E6=89=93=E5=8C=85=E8=B5=84?=
=?UTF-8?q?=E6=BA=90=EF=BC=8C=E8=87=AA=E5=8A=A8=E5=B0=86=E9=A1=B9=E7=9B=AE?=
=?UTF-8?q?=E7=9A=84StreamingAssets=E5=A4=8D=E5=88=B6=E5=88=B0=E6=89=93?=
=?UTF-8?q?=E5=8C=85=E5=90=8E=E7=9A=84StreamingAssets=E6=96=87=E4=BB=B6?=
=?UTF-8?q?=E5=A4=B9=E4=B8=8B=202=EF=BC=9AUpdateSetting=20=EF=BC=881?=
=?UTF-8?q?=EF=BC=89=E6=96=B0=E5=A2=9Ewebgl=E8=AE=BE=E7=BD=AE=EF=BC=8C?=
=?UTF-8?q?=E9=80=89=E6=8B=A9=E8=AE=BF=E9=97=AE=E8=BF=9C=E7=A8=8B=E8=BF=98?=
=?UTF-8?q?=E6=98=AFStreamingAssets=20=EF=BC=882=EF=BC=89=E6=9E=84?=
=?UTF-8?q?=E5=BB=BA=E8=B5=84=E6=BA=90=E8=AE=BE=E7=BD=AE=EF=BC=9A=E6=98=AF?=
=?UTF-8?q?=E5=90=A6=E8=87=AA=E5=8A=A8=E5=A4=8D=E5=88=B6=E8=B5=84=E6=BA=90?=
=?UTF-8?q?=E5=8C=85=E5=88=B0=E6=89=93=E5=8C=85=E5=9C=B0=E5=9D=80=EF=BC=9B?=
=?UTF-8?q?=E6=89=93=E5=8C=85=E5=9C=B0=E5=9D=80=E5=A6=82=EF=BC=9A../../Bui?=
=?UTF-8?q?lds/Unity=5FData/StreamingAssets=EF=BC=8C=E6=94=AF=E6=8C=81?=
=?UTF-8?q?=E7=BB=9D=E5=AF=B9=E8=B7=AF=E5=BE=84=E5=92=8C=E7=9B=B8=E5=AF=B9?=
=?UTF-8?q?=E8=B7=AF=E5=BE=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Editor/ReleaseTools/ReleaseTools.cs | 79 ++++++++++++++++++-
.../TEngine/Runtime/Core/UpdateSetting.cs | 54 ++++++++++++-
.../Module/ResourceModule/IResourceModule.cs | 7 +-
.../Module/ResourceModule/ResourceModule.cs | 10 ++-
.../ResourceModule/ResourceModuleDriver.cs | 1 +
5 files changed, 146 insertions(+), 5 deletions(-)
diff --git a/UnityProject/Assets/TEngine/Editor/ReleaseTools/ReleaseTools.cs b/UnityProject/Assets/TEngine/Editor/ReleaseTools/ReleaseTools.cs
index 7cda6006..07a11496 100644
--- a/UnityProject/Assets/TEngine/Editor/ReleaseTools/ReleaseTools.cs
+++ b/UnityProject/Assets/TEngine/Editor/ReleaseTools/ReleaseTools.cs
@@ -57,14 +57,89 @@ namespace TEngine
Debug.LogWarning($"Start BuildPackage BuildTarget:{target} outputPath:{outputRoot}");
}
- [MenuItem("TEngine/Build/一键打包AssetBundle")]
+ [MenuItem("TEngine/Build/一键打包AssetBundle _F8")]
public static void BuildCurrentPlatformAB()
- {
+ {
+ BuildDLLCommand.BuildAndCopyDlls();
BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
BuildInternal(target, Application.dataPath + "/../Builds/", packageVersion: GetBuildPackageVersion());
AssetDatabase.Refresh();
+ //复制到打包后的StreamingAssets
+ CopyStreamingAssetsFiles();
}
+ ///
+ /// 复制StreamingAssets文件去打包目录
+ ///
+ public static void CopyStreamingAssetsFiles()
+ {
+ if (!Settings.UpdateSetting.IsAutoAssetCopeToBuildAddress())
+ {
+ Debug.Log("UpdateSetting.IsAutoAssetCopeToBuildAddress关闭,并不会生产到打包目录中");
+ return;
+ }
+ // 获取StreamingAssets路径
+ string streamingAssetsPath = Application.streamingAssetsPath;
+ // 目标路径,可以是任何你想要的目录
+ string targetPath = Settings.UpdateSetting.GetBuildAddress();
+
+ // 判断目标路径是相对路径还是绝对路径
+ if (!System.IO.Path.IsPathRooted(targetPath))
+ {
+ // 如果是相对路径,结合 StreamingAssets 的路径进行合并
+ targetPath = System.IO.Path.Combine(streamingAssetsPath, targetPath);
+ }
+
+ // 如果目标目录不存在,创建它
+ if (!System.IO.Directory.Exists(targetPath))
+ {
+ Debug.LogError("打包目录不存在,检查UpdateSetting BuildAddress:"+targetPath);
+ return;
+ }
+ // 删除目标路径下的所有文件
+ string[] Deletefiles = System.IO.Directory.GetFiles(targetPath);
+ foreach (var file in Deletefiles)
+ {
+ System.IO.File.Delete(file);
+ Debug.Log($"删除文件: {file}");
+ }
+
+ // 删除目标路径下的所有子目录
+ string[] directories = System.IO.Directory.GetDirectories(targetPath);
+ foreach (var directory in directories)
+ {
+ System.IO.Directory.Delete(directory, true); // true 表示递归删除子目录及其中内容
+ Debug.Log($"删除目录: {directory}");
+ }
+
+ // 获取StreamingAssets中的所有文件,排除.meta文件
+ string[] files = System.IO.Directory.GetFiles(streamingAssetsPath, "*", System.IO.SearchOption.AllDirectories);
+
+ // 遍历并复制文件到目标目录
+ foreach (var file in files)
+ {
+ // 排除.meta文件
+ if (file.EndsWith(".meta"))
+ continue;
+
+ // 获取相对路径,用于在目标目录中创建相同的文件结构
+ string relativePath = file.Substring(streamingAssetsPath.Length + 1);
+ string destinationFilePath = System.IO.Path.Combine(targetPath, relativePath);
+
+ // 确保目标文件夹存在
+ string destinationDir = System.IO.Path.GetDirectoryName(destinationFilePath);
+ if (!System.IO.Directory.Exists(destinationDir))
+ {
+ System.IO.Directory.CreateDirectory(destinationDir);
+ }
+
+ // 复制文件
+ System.IO.File.Copy(file, destinationFilePath, true); // true 表示覆盖已存在的文件
+
+
+ }
+ Debug.Log($"复制文件完成:{targetPath}");
+ }
private static BuildTarget GetBuildTarget(string platform)
{
BuildTarget target = BuildTarget.NoTarget;
diff --git a/UnityProject/Assets/TEngine/Runtime/Core/UpdateSetting.cs b/UnityProject/Assets/TEngine/Runtime/Core/UpdateSetting.cs
index 2a1e9344..c89ee56c 100644
--- a/UnityProject/Assets/TEngine/Runtime/Core/UpdateSetting.cs
+++ b/UnityProject/Assets/TEngine/Runtime/Core/UpdateSetting.cs
@@ -36,7 +36,17 @@ namespace TEngine
///
NoNotice = 2,
}
-
+ ///
+ /// WebGL平台下,
+ /// StreamingAssets:跳过远程下载资源直接访问StreamingAssets
+ /// Remote:访问远程资源
+ ///
+ public enum LoadResWayWebGL
+ {
+ Remote,
+ StreamingAssets,
+ }
+
[CreateAssetMenu(menuName = "TEngine/UpdateSetting", fileName = "UpdateSetting")]
public class UpdateSetting : ScriptableObject
{
@@ -96,6 +106,48 @@ namespace TEngine
[SerializeField]
private string FallbackResDownLoadPath = "http://127.0.0.1:8082";
+ ///
+ /// WebGL平台加载本地资源/加载远程资源。
+ ///
+ [Header("WebGL设置")]
+ [SerializeField]
+ private LoadResWayWebGL LoadResWayWebGL = LoadResWayWebGL.Remote;
+ ///
+ /// 是否自动你讲打包资源复制到打包后的StreamingAssets地址
+ ///
+ [Header("构建资源设置")]
+ [SerializeField]
+ private bool isAutoAssetCopeToBuildAddress = false;
+ ///
+ /// 打包程序资源地址
+ ///
+ [SerializeField]
+ private string BuildAddress = "../../Builds/Unity_Data/StreamingAssets";
+ ///
+ /// 是否自动你讲打包资源复制到打包后的StreamingAssets地址
+ ///
+ ///
+ public bool IsAutoAssetCopeToBuildAddress()
+ {
+ return isAutoAssetCopeToBuildAddress;
+ }
+ ///
+ /// 获取打包程序资源地址
+ ///
+ ///
+ public string GetBuildAddress()
+ {
+ return BuildAddress;
+ }
+
+ ///
+ /// 是否加载远程资源
+ ///
+ ///
+ public LoadResWayWebGL GetLoadResWayWebGL()
+ {
+ return LoadResWayWebGL;
+ }
///
/// 获取资源下载路径。
///
diff --git a/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/IResourceModule.cs b/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/IResourceModule.cs
index 95981094..9afcb8ad 100644
--- a/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/IResourceModule.cs
+++ b/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/IResourceModule.cs
@@ -76,7 +76,12 @@ namespace TEngine
/// 备用热更URL。
///
string FallbackHostServerURL { get; set; }
-
+
+ ///
+ /// WebGL平台加载本地资源/加载远程资源。
+ ///
+ LoadResWayWebGL LoadResWayWebGL { get; set; }
+
///
/// 获取或设置资源对象池自动释放可释放对象的间隔秒数。
///
diff --git a/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/ResourceModule.cs b/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/ResourceModule.cs
index dde48149..752cd5c8 100644
--- a/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/ResourceModule.cs
+++ b/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/ResourceModule.cs
@@ -53,6 +53,11 @@ namespace TEngine
public string HostServerURL { get; set; }
public string FallbackHostServerURL { get; set; }
+
+ ///
+ /// WebGL:加载资源方式
+ ///
+ public LoadResWayWebGL LoadResWayWebGL { get; set; }
private string _applicableGameVersion;
@@ -207,7 +212,10 @@ namespace TEngine
createParameters.WebServerFileSystemParameters = WechatFileSystemCreater.CreateFileSystemParameters(packageRoot, remoteServices, webDecryptionServices);
#else
Log.Info("=======================UNITY_WEBGL=======================");
- createParameters.WebRemoteFileSystemParameters = FileSystemParameters.CreateDefaultWebRemoteFileSystemParameters(remoteServices, webDecryptionServices);
+ if (LoadResWayWebGL==LoadResWayWebGL.Remote)
+ {
+ createParameters.WebRemoteFileSystemParameters = FileSystemParameters.CreateDefaultWebRemoteFileSystemParameters(remoteServices, webDecryptionServices);
+ }
createParameters.WebServerFileSystemParameters = FileSystemParameters.CreateDefaultWebServerFileSystemParameters(webDecryptionServices);
#endif
initializationOperation = package.InitializeAsync(createParameters);
diff --git a/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/ResourceModuleDriver.cs b/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/ResourceModuleDriver.cs
index edc7b789..931f4fd7 100644
--- a/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/ResourceModuleDriver.cs
+++ b/UnityProject/Assets/TEngine/Runtime/Module/ResourceModule/ResourceModuleDriver.cs
@@ -250,6 +250,7 @@ namespace TEngine
_resourceModule.Milliseconds = milliseconds;
_resourceModule.HostServerURL = Settings.UpdateSetting.GetResDownLoadPath();
_resourceModule.FallbackHostServerURL = Settings.UpdateSetting.GetFallbackResDownLoadPath();
+ _resourceModule.LoadResWayWebGL=Settings.UpdateSetting.GetLoadResWayWebGL();
_resourceModule.DownloadingMaxNum = DownloadingMaxNum;
_resourceModule.FailedTryAgain = FailedTryAgain;
_resourceModule.UpdatableWhilePlaying = UpdatableWhilePlaying;