Чтобы добавить кнопку в элемент массива в Unity Editor с использованием кастомного `PropertyDrawer`, вы можете сделать следующее. Я предоставлю вам пример, который поможет вам понять, как это реализовать.
1. **Создайте класс AnimationData** с вашим массивом.
2. **Создайте кастомный PropertyDrawer** для AnimationData.
3. **Отобразите массив и добавьте кнопку** для каждого элемента массива.
Вот пример кода, который иллюстрирует этот процесс:
```csharp
using UnityEngine;
using UnityEditor;
[System.Serializable]
public class AnimationData
{
public string name;
// Другие параметры анимации
}
[CustomPropertyDrawer(typeof(AnimationData))]
public class AnimationDataDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
// Обозначим свойства, которые хотим отображать
SerializedProperty nameProperty = property.FindPropertyRelative("name");
// Отображаем текстовое поле для имени
position.height = EditorGUIUtility.singleLineHeight;
EditorGUI.PropertyField(position, nameProperty);
position.y += position.height + 2; // Сдвигаем позицию вниз
// Создаем кнопку
if (GUI.Button(position, "My Button"))
{
// Действие при нажатии кнопки
Debug.Log($"Button clicked for AnimationData: {nameProperty.stringValue}");
}
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
return EditorGUIUtility.singleLineHeight * 2 + 4; // Высота для текстового поля и кнопки
}
}
public class AnimatedObject : MonoBehaviour
{
public AnimationData[] animations;
}
```
### Объяснение кода:
1. **Класс AnimationData** — это ваш класс данных, содержащий анимационные параметры.
2. **Класс AnimationDataDrawer**:
- `OnGUI` — здесь мы определяем, как будет выглядеть ваш кастомный интерфейс. Мы используем `SerializedProperty`, чтобы получить доступ к полям в `AnimationData`.
- Мы создаем текстовое поле для имени анимации и добавляем кнопку под ним.
- По нажатию кнопки выполняется действие (в данном случае — вывод сообщения в консоль).
3. **Высота свойства** (`GetPropertyHeight`) устанавливает, сколько места займут вводимые элементы в редакторе.
Теперь, когда вы добавите массив `AnimationData` в вашем компоненте `AnimatedObject`, вы увидите, что каждый элемент массива будет иметь свое текстовое поле и кнопку. Вы можете адаптировать логику в обработчике кнопки в зависимости от ваших нужд.