【Unity】在构建好的项目里创建自定义文件夹
在构建好的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文件夹下的文件与项目的文件保持一致。