Я бы не рекомендовал бы напрямую изменить значение с помощью
Test myTest = (Test)target;
myTest.value = EditorGUI.TextField(textFieldRect, myTest.value);
Вместо этого используйте SerializedProperty
private SerializedProperty _value;
private void OnEnable()
{
// Link the SerializedProperty to the variable
_value = serializedObject.FindProperty("value");
}
public override OnInspectorGUI()
{
// fetch current values from the target
serializedObject.Update();
EditorGUI.PropertyField(textFieldRect, _value);
// Apply values to the target
serializedObject.ApplyModifiedValues();
}
Огромным преимуществом этого является то, что Undo / Redo и пометка Scene и class как «dirty» обрабатываются автоматически, и вам не нужно делать это вручную.
Однако, чтобы заставить это работать, переменные всегда должны быть либо public
, либо [SerializedField]
, что уже имеет место в вашем классе.
Вместо rect
Я бы на самом деле рекомендовал бы вам использовать EditorGUILayout.PropertyField
и устанавливать размеры с помощью GUILayout.ExpandWidth
и GUILayout.ExpandHeight
или остальные доступны под
опция
GUILayout.Width,
GUILayout.Height,
GUILayout.MinWidth,
GUILayout.MaxWidth,
GUILayout.MinHeight,
GUILayout.MaxHeight,
GUILayout.ExpandWidth,
GUILayout.ExpandHeight.
Чтобы не показывать метку, используйте GUIContent.none
.
Так что это может выглядеть как
EditorGUILayout.PropertyField(_value, GUIContent.none, GUILayout.ExpandHeight, GUILayout.ExpandWith);