【Unity】打包报错类型不存在于命名空间内
1 前言
这里的打包准确来说是资源包,使用YooAsset进行打包资源时报了这个错误:error CS0234: The type or namespace name 'AssetModificationProcessor' does not exist in the namespace 'UnityEditor' (are you missing an assembly reference?)。本来是可以打包的,但我一顿程序集划分、引用后再打包就报错了。
2 问题
查询相关资料后,发现似乎是Editor脚本的原因。具体什么原因我也不确定,可能是Editor单独划分程序集后在打包时无法识别?
3 解决
解决方案也很简单,给Editor脚本加上宏判断即可:
//原来的脚本内容
using UnityEditor;
using ···
···
namespace ···
{
···
}
//加判断宏后
#if UNITY_EDITOR //若是编辑器状态
using UnityEditor;
using ···
···
namespace ···
{
···
}
#endif
可以看到,我给整个脚本加了个编辑器状态判断的宏,这样可以理解为非编辑器状态下此脚本内容就不存在了。通常Runtime逻辑也不会去引用Editor逻辑,所以非编辑器状态下隐藏Editor脚本内容也不会出现引用错误。之后测试,打包成功。
4 后记
核心在于屏蔽掉涉及到Editor的内容。我的方法较为粗暴,直接对整个脚本进行判断,实际也可以只对脚本中涉及到Editor的内容判断,保留不涉及的部分。当然,也要确保屏蔽掉涉及Editor的内容后不会造成保留的内容发生错误。