是的,您可以扩展 UI 组件并为它们编写自己的自定义检查器。
您只需要记住使用正确的命名空间并从正确的 Inspector 类继承。
你当然也可以覆盖!
这里的例子是一个 UISegmentedControlButton
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
public class UISegmentedControlButton : Button {
public Sprite offSprite;
public Sprite onSprite;
public Color offTextColor = Color.white;
public Color onTextColor = Color.white;
private bool isSelected;
public bool IsSelected {
get {
return isSelected;
}
set {
isSelected = value;
Text text = this.transform.GetComponentInChildren<Text>();
if (value) {
this.GetComponent<Image>().sprite = onSprite;
text.color = onTextColor;
} else {
this.GetComponent<Image>().sprite = offSprite;
text.color = offTextColor;
}
}
}
public override void OnPointerClick(PointerEventData eventData) {
this.transform.parent.GetComponent<UISegmentedControl>().SelectSegment(this);
base.OnPointerClick(eventData);
}
}
以及它的编辑器类:
附: ButtonEditor 与 UnityEditor.UI.ButtonEditor 不同,因为第一个来自 UnityEngine.ButtonEditor。要从 UnityEditor 访问 .UI,您需要将 Editor 脚本放在 Editor 文件夹下
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
using System.Collections;
[CustomEditor(typeof(UISegmentedControlButton))]
public class UISegmentedControlButtonEditor : UnityEditor.UI.ButtonEditor {
public override void OnInspectorGUI() {
UISegmentedControlButton component = (UISegmentedControlButton)target;
base.OnInspectorGUI();
component.onSprite = (Sprite)EditorGUILayout.ObjectField("On Sprite", component.onSprite, typeof(Sprite), true);
component.onTextColor = EditorGUILayout.ColorField("On text colour", component.onTextColor);
component.offSprite = (Sprite)EditorGUILayout.ObjectField("Off Sprite", component.offSprite, typeof(Sprite), true);
component.offTextColor = EditorGUILayout.ColorField("Off text colour", component.offTextColor);
}
}
这里还有一个直接指向 Unity UI 源代码的有用链接
https://bitbucket.org/Unity-Technologies/ui/src
还有一点证明它有效: