Есть ли способ установить динамическое сериализуемое поле в пределах единицы?Я пытался использовать object
и UnityEngine.Object
, оба дают ошибки.
object
не представляется сериализуемым, потому что value
является нулевым.
NullReferenceException: Ссылка на объект не установлена на экземпляр объекта
UnityEngine.Object
является сериализуемым, но когда я пытаюсь установить для него int, я получаю следующую ошибку:
тип не поддерживается int значение
Так как я могу установить динамический тип для переменной?
public enum ValueType { Integer, Float, String, Boolean, GameObject }
public class SetVariable : ScriptableObject {
public ValueType valueType;
public string key;
public object value;
}
Затем у меня есть специальный скрипт инспектора, которыйвыглядит так:
SerializedObject serializedObject;
public void SetObject(MyObject obj) {
serializedObject = new SerializedObject(obj);
}
public override void OnDisplay() {
accessType = serializedObject.FindProperty("accessType");
key = serializedObject.FindProperty("key");
value = serializedObject.FindProperty("value");
}
public override void OnGUI() {
EditorGUILayout.PropertyField(valueType);
EditorGUILayout.PropertyField(key);
if (key.stringValue.Trim().Length > 0) {
switch (valueType.enumNames[valueType.enumValueIndex]) {
case "Integer":
value.intValue = EditorGUILayout.IntField(value.displayName, value.intValue);
break;
}
}
}