Получить и установить значение System.Object с помощью Unity SerializedProperties - PullRequest
0 голосов
/ 22 марта 2019

Я хочу иметь возможность указать тип с помощью enum и присвоить значение переменной объекта, но я продолжаю получать сообщение об ошибке « NullReferenceException .. ».

enter image description here

У меня есть этот простой класс:

[System.Serializable()]
public class ObjectValue
{
    public enum ValueType { Null, Integar, Float, String, Boolean }
    [SerializeField, HideInInspector] private ValueType type = ValueType.Null;

    public object value = null;
}

И с помощью скрипта ящика свойств я хочу иметь возможность просматривать этот класс в Инспекторе и редактировать значение в зависимости от выбранного типа:

using UnityEditor;
using UnityEngine;

[CustomPropertyDrawer(typeof(ObjectValue))]
public class ObjectValue_Drawer : PropertyDrawer
{
    public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
    {
        return base.GetPropertyHeight(property, label) + 17;
    }
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        GUI.Box(position, GUIContent.none);
        var typeEnum = property.FindPropertyRelative("type");

        position.height = 17;
        EditorGUI.PropertyField(position, typeEnum);
        position.y += 17;

        var value = property.FindPropertyRelative("value");
        switch (typeEnum.enumValueIndex)
        {
            case (int)ObjectValue.ValueType.Null:
                GUI.Label(position, "Null Value Type");
                break;
            case (int)ObjectValue.ValueType.Integar:
                value.intValue = EditorGUI.IntField(position, "Value", value.intValue);
                break;
            case (int)ObjectValue.ValueType.Float:
                value.floatValue = EditorGUI.FloatField(position, "Value", value.floatValue);
                break;
            case (int)ObjectValue.ValueType.String:
                value.stringValue = EditorGUI.TextField(position, "Value", value.stringValue);
                break;
            case (int)ObjectValue.ValueType.Boolean:
                value.boolValue = EditorGUI.Toggle(position, "Value", value.boolValue);
                break;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...