在构建好的Unity项目里自动创建名为“ExternalData”的文件夹:
实现步骤:
1. 在项目目录(Asset)下创建一个自定义的文件夹:Assets/ExternalData[文件夹里可以放文件,会被一起复制过去]);
2. 编写下方脚本,并将其放在Editor文件夹下;
using System.IO; using UnityEditor.Build; using UnityEditor.Build.Reporting; using UnityEngine; /// <summary> /// 这是一个继承了 IPostprocessBuildWithReport 接口的类,用于在Unity构建完成后执行自定义操作。 /// </summary> public class PostBuildProcessor : IPostprocessBuildWithReport { public int callbackOrder => 0;// 回调顺序,数字越小越先执行 /// <summary> /// 该方法会在Unity构建完成后自动调用 /// </summary> /// <param name="report">构建完成后的报告</param> public void OnPostprocessBuild(BuildReport report) { // 源文件夹路径(项目内) string sourceFolder = Path.Combine(Application.dataPath, "_ExternalData"); // 目标路径(构建输出目录) string buildPath = Path.GetDirectoryName(report.summary.outputPath); string targetFolder = Path.Combine(buildPath, "_ExternalData"); // 复制文件夹 if (Directory.Exists(sourceFolder)) { CopyDirectory(sourceFolder, targetFolder); Debug.Log($"已复制自定义文件夹到: {targetFolder}"); } else { Debug.LogWarning($"自定义文件夹不存在: {sourceFolder}"); } } /// <summary> /// 复制文件夹及其内容到目标目录 /// </summary> /// <param name="sourceDir">源文件夹</param> /// <param name="targetDir">目标文件夹</param> private void CopyDirectory(string sourceDir, string targetDir) { // 遍历源文件夹里的所有文件 Directory.CreateDirectory(targetDir); foreach (var file in Directory.GetFiles(sourceDir)) { // 使用System.IO中的静态类File实现复制文件 // 参数解释为:源文件的具体路径,目标文件的路径,true表示覆盖已经存在的同名同类型文件 File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)), true); } // 遍历源文件夹里的所有子文件 foreach (var dir in Directory.GetDirectories(sourceDir)) { // 获取该子文件夹的名称 string dirName = Path.GetFileName(dir); // 使用递归的方式继续遍历该子文件夹 CopyDirectory(dir, Path.Combine(targetDir, dirName)); } } }
3. build项目后,就可以在构建好的项目里看到名为ExternalData的文件夹(与可执行文件同级),该ExternalData文件夹下的文件与项目的文件保持一致。