
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 会重置为默认值
}
}
本文介绍了一个Unity中自定义的RangeFloat结构体及相应的属性绘制器,用于更直观地编辑两个浮点数之间的范围。该绘制器通过GUI界面展示最小值与最大值,并允许用户方便地调整这些值。
2290

被折叠的 条评论
为什么被折叠?



