自定义检查员
使用自定义检查器可以更改在 Inspector 中绘制脚本的方式。有时,你希望在检查器中为脚本添加额外信息,这些信息无法与自定义属性抽屉一起使用。
下面是一个自定义对象的简单示例,使用自定义检查器可以显示更多有用信息。
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class InspectorExample : MonoBehaviour {
public int Level;
public float BaseDamage;
public float DamageBonus {
get {
return Level / 100f * 50;
}
}
public float ActualDamage {
get {
return BaseDamage + DamageBonus;
}
}
}
#if UNITY_EDITOR
[CustomEditor( typeof( InspectorExample ) )]
public class CustomInspector : Editor {
public override void OnInspectorGUI() {
base.OnInspectorGUI();
var ie = (InspectorExample)target;
EditorGUILayout.LabelField( "Damage Bonus", ie.DamageBonus.ToString() );
EditorGUILayout.LabelField( "Actual Damage", ie.ActualDamage.ToString() );
}
}
#endif
首先,我们使用一些字段定义自定义行为
public class InspectorExample : MonoBehaviour {
public int Level;
public float BaseDamage;
}
在检查器窗口中查看脚本时,将自动绘制上面显示的字段(无需自定义检查器)。
public float DamageBonus {
get {
return Level / 100f * 50;
}
}
public float ActualDamage {
get {
return BaseDamage + DamageBonus;
}
}
Unity 不会自动绘制这些属性。要在 Inspector 视图中显示这些属性,我们必须使用自定义检查器。
我们首先要定义这样的自定义检查器
[CustomEditor( typeof( InspectorExample ) )]
public class CustomInspector : Editor {
自定义检查器必须从编辑器派生并需要 CustomEditor 属性。属性的参数是此自定义检查器应用于的对象的类型。
接下来是 OnInspectorGUI 方法。只要在检查器窗口中显示脚本,就会调用此方法。
public override void OnInspectorGUI() {
base.OnInspectorGUI();
}
我们调用 base.OnInspectorGUI()
让 Unity 处理脚本中的其他字段。如果我们不调用我们,我们就必须自己做更多工作。
接下来是我们要显示的自定义属性
var ie = (InspectorExample)target;
EditorGUILayout.LabelField( "Damage Bonus", ie.DamageBonus.ToString() );
EditorGUILayout.LabelField( "Actual Damage", ie.ActualDamage.ToString() );
我们必须创建一个临时变量,它将目标保存到我们的自定义类型(目标可用,因为我们从编辑器派生)。
接下来我们可以决定如何绘制我们的属性,在这种情况下,两个 labelfield 就足够了,因为我们只想显示值而不能编辑它们。
结果
之前
后