Unity не сериализует int?поле - PullRequest
0 голосов
/ 17 октября 2018

У меня есть класс, в котором я хочу изменить свойства редактора.Поэтому я сделал свой класс System.Serializable и сделал переменные общедоступными, которые я хочу изменить.
Примерно так:

[System.Serializable]
public class UIOptionsRing
{
    public float Radius, DistanceBetweenPoints, StartOffset, GapInDegrees;
    public int? GapAfterElementNumer = 3; //this var doesnt show up
    public Vector3 CircleCenter;
    public GameObject CircleElementsContainer;

}

Но проблема, с которой я столкнулся, заключается в том, что GapAfterElementNumer не отображаетсяв редакторе все остальные поля есть.Как я могу сделать так, чтобы int? также появился?

1 Ответ

0 голосов
/ 17 октября 2018

Обнуляемые типы не сериализуются в Unity Editor, потому что его сериализатор не поддерживает null.Есть небольшой обходной путь, если вы не собираетесь сериализовать этот класс в json, используя JsonUtility.Основная идея заключается в том, что вы должны создать свой собственный обнуляемый int.Что-то вроде

public class IntNullable 
{
     public int Value;
     public bool HasValue;
 }

Так же, как это делается внутри .NET.Затем вы можете создать Пользовательский редактор для IntNullable или ваш UIOptionsRing.В этом редакторе вы можете создать поле для значения int и кнопку «Set Null», которая изменит значение переменной HasValue.И далее вам нужно поработать с этим кастомным IntNullable в вашем коде.

...