Unity:IPreprocessBuildWithReport构建时未运行,求问题排查
问题排查与解决步骤
1. 修正脚本访问修饰符
你的MyCustomBuildProcessor类使用了默认的internal访问权限,Unity编辑器可能无法正确识别这个构建处理器类。将类改为public即可解决识别问题:
using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; using UnityEngine; public class MyCustomBuildProcessor : IPreprocessBuildWithReport { public int callbackOrder { get { return 0; } } public void OnPreprocessBuild(BuildReport report) { Debug.Log("MyCustomBuildProcessor.OnPreprocessBuild for target " + report.summary.platform + " at path " + report.summary.outputPath); } }
2. 确认Editor文件夹的有效性
- 确保脚本所在文件夹名称为Editor(首字母大写,拼写完全正确),Unity仅会识别此命名文件夹下的编辑器脚本。
- 路径
Assets/Scripts/Editor是合法的,若仍无效,可尝试将脚本直接移至Assets/Editor根目录测试。
3. 检查控制台过滤设置
打开Unity控制台,确认:
- 未勾选
Play Mode Only选项,取消该勾选才能看到编辑器构建阶段的日志。 - 日志过滤级别未设为
Error或Warning,需设置为Info或All才能显示Debug.Log输出的信息。
4. 确认构建触发方式
确保通过Unity编辑器的Build Settings窗口点击Build或Build And Run触发构建,部分第三方构建工具或自定义批量构建脚本可能不会触发默认的构建回调(若使用此类工具,需确保其调用了Unity标准构建API)。
额外提示:文件复制逻辑优化
你需要将文件复制到Build文件夹,IPreprocessBuildWithReport在构建开始前执行,此时输出路径的文件夹可能尚未创建,更推荐使用IPostprocessBuildWithReport(构建完成后触发),确保输出目录已存在,避免复制失败。示例代码:
using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; using UnityEngine; using System.IO; public class MyCustomBuildProcessor : IPostprocessBuildWithReport { public int callbackOrder { get { return 0; } } public void OnPostprocessBuild(BuildReport report) { Debug.Log("MyCustomBuildProcessor.OnPostprocessBuild at path " + report.summary.outputPath); // 示例文件复制逻辑 string sourceFile = Path.Combine(Application.dataPath, "YourFiles/Example.txt"); string destFile = Path.Combine(report.summary.outputPath, "Example.txt"); File.Copy(sourceFile, destFile, overwrite: true); } }
内容的提问来源于stack exchange,提问作者ghufran ullah
相关产品推荐
相关产品推荐

