Как сериализовать пользовательский класс в пользовательском инспекторе?C#

Место общения программистов C#
Ответить
Anonymous
 Как сериализовать пользовательский класс в пользовательском инспекторе?

Сообщение Anonymous »

Мне нужно сериализовать класс в пользовательском инспекторе (с помощью визуального редактора), как это делается в сценарии Monobehaviour, например:

Код: Выделить всё

[System.Serializable]
public class CustomClass
{
int myInt
}

Код: Выделить всё

public class OtherClass : MonoBehaviour
{
[SerializeField] CustomClass customClass;
}
что дает следующий результат:
результат требуется и дается с использованием приведенного выше кода, где DamageEffect = CustomClass и Damage = myInt
В моем пользовательском редакторе мне бы хотелось что-то вроде этого:

Код: Выделить всё

[CustomEditor(typeof(CardObject))]
class AnotherClassEditor : Editor
{
public override void OnInspectorGUI()
{
[SerializeField] CustomClass customclass;
}
}
но, как и ожидалось, он указывает на ошибку.
Я также пробовал использовать EditorGUILayout.ObjectField(), но мне не удалось, у меня не так много опыта, поэтому, пожалуйста, постарайтесь, чтобы ответы были простыми.
На самом деле мне нужно, чтобы эта сериализация происходила только тогда, когда перечисление равно определенному значению, общий сценарий выглядит примерно так:

Код: Выделить всё

using System.Collections.Generic;
using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
#endif

[CreateAssetMenu(fileName = "Card", menuName = "CardObject")]
public class CardObject : ScriptableObject
{
public List effectsTypes;
//other...
[HideInInspector] public List effects;

//other...
}

#if UNITY_EDITOR
[CustomEditor(typeof(CardObject))]
class CardObjectEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
CardObject cardObject = (CardObject)target;

foreach(CardEffectType effectType in cardObject.effectsTypes)
{
switch (effectType)
{
case CardEffectType.DamageEffect:
{
//!!!
}
}
}
}
}
#endif

public enum CardEffectType
{
DamageEffect, //other...
}
Я нашел несколько обходных путей, но результат не такой, как при сериализации класса в моноповедении.

Подробнее здесь: https://stackoverflow.com/questions/741 ... -inspector
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»