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;