- using UnityEngine;
-
- [System.Serializable]
- public struct RangeFloat {
-
- public float min;
- public float max;
-
- public RangeFloat (float minValue, float maxValue) {
- min = minValue;
- max = maxValue;
- }
-
- public float Lerp (float t) {
- return Mathf.Lerp(min, max, t);
- }
- }
以下代码放置在名为 Editor 的文件夹下
- #pragma warning disable 0649
-
- using UnityEditor;
- using UnityEngine;
-
- [CustomPropertyDrawer(typeof(RangeFloat))]
- public class RangeFloatDrawer : PropertyDrawer {
-
- public override void OnGUI (Rect position, SerializedProperty property, GUIContent label) {
- // 只能在 position 指定的范围内绘制
- EditorGUI.BeginProperty(position, label, property);
- {
- float x, w;
- int elementCount = 3;
- for (int i = 0; i < elementCount; i++) {
- w = position.width / elementCount;
- x = position.x + w * i;
- switch (i) {
- case 0:
- EditorGUIUtility.labelWidth = 25;
- EditorGUI.LabelField(new Rect(x, position.y, w, position.height), property.displayName);
- break;
- case 1:
- EditorGUIUtility.labelWidth = 25;
- EditorGUI.PropertyField(new Rect(x, position.y, w, position.height), property.FindPropertyRelative("min"));
- break;
- case 2:
- EditorGUIUtility.labelWidth = 25;
- EditorGUI.PropertyField(new Rect(x, position.y, w, position.height), property.FindPropertyRelative("max"));
- break;
- }
- }
- }
- EditorGUI.EndProperty();
- EditorGUIUtility.labelWidth = 0; // 将其设置为 0 会重置为默认值
- }
-
- }