Задать вопрос
vkvk
@vkvk

Как разместить кнопку в элементе массива UnityEditor?

Всем привет! Пытаюсь разместить кнопку в моем AnimationData, который имеет кастомный PropertyDrawer так, чтобы потом в объекте AnimatedObject, который имеет список таких AnimationData она отображалась корректно. Но сейчас она появляется вот так

6756df873f39e622309549.png

Код в котором создаю кнопку:

private float DrawPositionsFields(SerializedProperty property, float x, float currentY, float width)
    {
        float lineHeight = EditorGUIUtility.singleLineHeight;
        float spacing = EditorGUIUtility.standardVerticalSpacing;

        Rect startPositionRect = new Rect(x, currentY, width, lineHeight);
        Rect endPositionRect = new Rect(x, currentY + lineHeight + spacing, width, lineHeight);

        SerializedProperty startPositionProperty = property.FindPropertyRelative(StartPositionField);
        SerializedProperty endPositionProperty = property.FindPropertyRelative(EndPositionField);

        startPositionProperty.vector3Value = EditorGUI.Vector3Field(startPositionRect, StartPositionFieldLabel, startPositionProperty.vector3Value);
        endPositionProperty.vector3Value = EditorGUI.Vector3Field(endPositionRect, EndPositionFieldLabel, endPositionProperty.vector3Value);

        currentY += 2 * (lineHeight + spacing);

        Rect buttonRect = new Rect(x, currentY, width, lineHeight);  // Используем ширину поля
        if (GUI.Button(buttonRect, "Edit"))
        {
            // Логика для кнопки
            var targetObject = property.serializedObject.targetObject;

            if (targetObject is AnimatedObject animatedObject)
            {
                int index = GetIndex(property.propertyPath);
                if (index >= 0 && index < animatedObject.Animations.Count)
                {
                    AnimationData data = animatedObject.Animations[index];

                    data?.OnEditing?.Invoke(data);
                    Debug.Log("OnEditing invoked");
                }
            }
        }

        return currentY + (lineHeight + spacing);
    }


Код из моего кастомного инспектора AnimatedObject

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(AnimatedObject))]
public class AnimatedObjectEditor : Editor
{
    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        SerializedProperty animationsProperty = serializedObject.FindProperty("_animations");

        EditorGUILayout.PropertyField(animationsProperty, new GUIContent("Animations"), true);
        DrawStopEditButton();
        serializedObject.ApplyModifiedProperties();
    }

    private static void DrawStopEditButton()
    {
        if (GUILayout.Button("Stop edit"))
        {

        }
    }
}


Хочу сохранить стандартный вид списка, но при этом добавить в него кнопку. Когда я не перерисовываю инспектор, то все отображается корректно, однако мне нужна в нем кнопка Stop edit и при её добавлении возникают такие трудности. Можно ли это как-то исправить?
  • Вопрос задан
  • 23 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
vkvk
@vkvk Автор вопроса
Достаточно просто добавить дополнительное место под эту кнопку и она будет отображаться корректно в каждом последующем элементе списка.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы