Надеюсь, я правильно понял ваш вопрос, взятый из документации Unity :
using UnityEngine;
public enum IngredientUnit { Spoon, Cup, Bowl, Piece }
// Custom serializable class
[Serializable]
public class Ingredient
{
public string name;
public int amount = 1;
public IngredientUnit unit;
}
public class Recipe : MonoBehaviour
{
public Ingredient potionResult;
public Ingredient[] potionIngredients;
}
[CustomPropertyDrawer(typeof(Ingredient))]
public class IngredientDrawerUIE : PropertyDrawer
{
public override VisualElement CreatePropertyGUI(SerializedProperty property)
{
// Create property container element.
var container = new VisualElement();
// Create property fields.
var amountField = new PropertyField(property.FindPropertyRelative("amount"));
var unitField = new PropertyField(property.FindPropertyRelative("unit"));
var nameField = new PropertyField(property.FindPropertyRelative("name"), "Fancy Name");
// Add fields to the container.
container.Add(amountField);
container.Add(unitField);
container.Add(nameField);
return container;
}
}
Так что при просмотре GameObject с компонентом Recipe
инспектор Unity будет покажите что-то вроде этого:
Так что вам не нужно наследовать от чего-либо, просто пометьте класс, для которого вы хотите создать ящик свойств, как Serializable
, и создайте свойство класс выдвижного ящика для него (не забудьте поместить его в папку Editor
или создать файл определения сборки, который предназначен для редактора, только если вы работаете с файлами определения сборки).