检查hierarchy属性missing
主要用到的API:
SerializedObject so=new SerializedObject(Object) 创建一个可序列化对象
var iter=so.GetIterator() 获取这个对象的迭代器 可以用iter.NextVisiable(true) 来判断有没有下一个属性
iter.propertyType 属性的类型
iter.objectReferenceValue 引用类型的属性引用的对象
iter.objectReferenceInstanceIDValue 不等于0时说明有引用对象 此时若objectReferenceValue为空 则说明Missing了
编辑器代码:
这里以Image组件为例子:
Image image = go.GetComponent<Image>();
if (image != null)
{
SerializedObject so = new SerializedObject(image);
SerializedProperty sp = so.GetIterator();
Rect rect;
while (sp.NextVisible(true))
{
if (sp.propertyType == SerializedPropertyType.ObjectReference)//检查是否为引用类型
{
//如果检查missing,可以改为 sp .objectReferenceValue == null && sp .objectReferenceInstanceIDValue != 0
if (sp.displayName == "Sprite" && sp.objectReferenceValue == null)//检查image的sprite是否为空或者丢失
{
//Todo something;
}
}
}
}
以上就是检查的思路了,有不正确的还望指正!