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;