当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/605220.html

相关文章:

  • Thales靶机
  • Redis知识点(1)
  • 【力扣热题100】哈希——字母异位词分组
  • 【c++】leetcode763 划分字母区间
  • LeetCode热题100--148. 排序链表--中等
  • 限流算法详解:固定窗口、滑动窗口、令牌桶与漏桶算法全面对比
  • 力扣-543.二叉树的直径
  • 【LeetCode】链表反转实现与测试
  • (补题)小塔的饭
  • sqLite 数据库 (3):以编程方式使用 sqLite,4 个函数,以及 sqLite 移植,合并编译
  • linux 执行sh脚本,提示$‘\r‘: command not found
  • C语言:函数指针、二级指针、常量指针常量、野指针
  • 【Kubernetes 指南】基础入门——Kubernetes 201(二)
  • Vite 模块动态导入之Glob导入
  • Cursor MCP搭建入门
  • 力扣热题100---------35.搜索插入为位置
  • jQuery UI Tabs切换功能实例
  • Python在自动化与运维领域的核心角色:工具化、平台化与智能化
  • Jaeger理论、实战、问题记录
  • TikTok 视频审核模型:用逻辑回归找出特殊类型的视频
  • Elasticsearch 文档操作管理:从增删改查到批量操作与数据类型
  • 硬性巩膜镜市场报告:深度解析行业现状与未来趋势
  • Java项目:基于SSM框架实现的济南旅游网站管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】
  • 同一雷达不同样式的pdw数据
  • FFmpeg:因码流采集与封装不同步导致录制出来的MP4文件会出现黑屏、绿屏的问题
  • 达梦数据库(DM Database)角色管理详解|了解DM预定义的各种角色,掌握角色创建、角色的分配和回收
  • 实现了加载 正向 碰撞 雅可比 仿真
  • 第十九周-文档数据库MongoDB、消息队列和微服务
  • I Built an Offline-Capable App by Myself: React Native Frontend, C# Backend
  • WebSocket 简介与在 Vue 中的使用指南