【Unity】在构建好的项目里创建自定义文件夹

发布于:2025-07-31 ⋅ 阅读:(20) ⋅ 点赞:(0)

在构建好的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文件夹下的文件与项目的文件保持一致。                


网站公告

今日签到

点亮在社区的每一天
去签到