Unity构建Xcode项目报AssetPostprocessor找不到如何解决
报错原因
AssetPostprocessor是Unity编辑器环境专属的API,归属UnityEditor命名空间,这类API只会在Unity编辑器运行时加载,不会被打包进面向iOS(Xcode)、Android等真机平台的运行时程序集里。你当前的脚本没有做编辑器环境隔离,平时在编辑器内开发时因为Editor程序集处于加载状态不会触发问题,导出Xcode工程时编译器会在运行时程序集里检索这个类型,找不到对应定义就会抛出该报错。
修复方法
- 优先用Editor文件夹隔离:把写了导入设置逻辑的
importsetting.cs脚本,移动到项目路径下任意层级的Editor命名文件夹中。Unity默认会将Editor文件夹下的所有脚本识别为编辑器专属代码,不会参与真机平台的构建编译,不需要额外修改代码就能解决报错。 - 如果脚本不方便移动,用预编译宏包裹编辑器专属代码段,让编译器在构建非编辑器平台时直接跳过这段代码的编译,参考实现见下方修正代码。
- 如果你项目中使用了Assembly Definition(asmdef,程序集定义文件),需要确认存放该脚本的编辑器程序集,仅勾选Editor平台作为目标平台,且正确引用了Unity Editor相关的程序集,不要把编辑器脚本放到运行时程序集里。
修正后的参考代码
using UnityEngine; // 用Unity内置宏隔离编辑器专属代码 #if UNITY_EDITOR using UnityEditor; public class importsetting : AssetPostprocessor { void OnPreprocessTexture() { // 此处编写纹理导入前的自定义设置逻辑 } } #endif
注意:所有使用
UnityEditor命名空间下类型、方法的代码,包括所有继承AssetPostprocessor的资源导入处理脚本,都必须做上述编辑器隔离,否则导出任何非编辑器平台的构建包时都会触发同类找不到类型的报错。
内容的提问来源于stack exchange,提问作者利维坦
相关产品推荐
相关产品推荐

