Как правильно отрисовывать CustomPropertyDrawer
Встала необходимость отрисовывать в редакторе сериализуемые классы определённым образом.
Есть кастомный редактор для объекта, который имеет вид:
Рисуются построчно одиночные поля и массивы, за ними есть 3 кнопки. Всё хорошо и замечательно.
Пробую сделать то же самое, но отрисовку полей и массивов делаю с помощью CustomPropertyDrawer. Сразу же натыкаюсь на такое:
То есть отрисовывается проперти, внутри которого отступы нормальные, а когда очередь доходит до отрисовки кнопок, они отрисовываются поверх, как будто весь проперти занимал 1 строку,а не несколько. Как с этим бороться? Блок кода редактора, где рисуется проперти и кнопки:
var prop = serializedObject.FindProperty(nameof(crt.displayedDimension));
PropertyField(prop);
serializedObject.ApplyModifiedProperties();
BeginHorizontal("box");
if (GUILayout.Button("Copy dimension"))
{
copyMatrix = new MatrixDimension<T>(cr.Dimensions[cr.currentDimensionIndex]);
}
if (GUILayout.Button("Paste copied dimension"))
{
confirmPressed = !confirmPressed;
if (copyMatrix != null)
onPress = () => { cr.Dimensions[cr.currentDimensionIndex] = new MatrixDimension<T>(copyMatrix); };
}
if (GUILayout.Button("Clear dimension"))
{
confirmPressed = !confirmPressed;
onPress = () => { cr.Dimensions[cr.currentDimensionIndex] = new MatrixDimension<T>(cr.ColumnsCount); };
}
EndHorizontal();
Код отрисовки проперти:
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
float space = 2f;
float labelSize = 150f;
var scaleFloat = property.FindPropertyRelative("scallingValue");
var dimensionName = property.FindPropertyRelative("dimensionName");
var namesArr = property.FindPropertyRelative("columnsNames.vector");
BeginProperty(position, label, property);
scaleFloat.floatValue = FloatField(position, new GUIContent("Dimension scale"), scaleFloat.floatValue);
position.y += position.height + space;
dimensionName.stringValue = TextField(position, new GUIContent("Dimension name"), dimensionName.stringValue);
position.y += position.height + space;
position = DrawArrayOneLine(position, labelSize,string.Empty, namesArr);
EndProperty();
property.serializedObject.ApplyModifiedProperties();
}