您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
51 行
1.8 KiB
51 行
1.8 KiB
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
using UnityEditor.UIElements;
|
|
|
|
namespace UnityEditor.Perception.Randomization.PropertyDrawers
|
|
{
|
|
[CustomPropertyDrawer(typeof(uint))]
|
|
class UIntDrawer : PropertyDrawer
|
|
{
|
|
public override VisualElement CreatePropertyGUI(SerializedProperty property)
|
|
{
|
|
var field = new UIntField
|
|
{
|
|
label = property.displayName,
|
|
value = (uint)property.longValue
|
|
};
|
|
|
|
//Binding does not work on this custom UI Element field that we have created, so we need to use the change event
|
|
field.RegisterValueChangedCallback(evt =>
|
|
{
|
|
field.value = evt.newValue;
|
|
property.longValue = evt.newValue;
|
|
property.serializedObject.ApplyModifiedProperties();
|
|
});
|
|
|
|
// Create a surrogate integer field to detect and pass along external change events (non UI event) on the underlying serialized property.
|
|
var surrogateField = new IntegerField();
|
|
field.Add(surrogateField);
|
|
surrogateField.style.display = DisplayStyle.None;
|
|
surrogateField.bindingPath = property.propertyPath;
|
|
surrogateField.RegisterValueChangedCallback(evt =>
|
|
{
|
|
evt.StopImmediatePropagation();
|
|
field.value = UIntField.ClampInput(property.longValue);
|
|
});
|
|
|
|
return field;
|
|
}
|
|
|
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
|
{
|
|
EditorGUI.PropertyField(position, property, label, true);
|
|
}
|
|
|
|
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
|
{
|
|
return EditorGUI.GetPropertyHeight(property);
|
|
}
|
|
}
|
|
}
|