问题
I have a class i want to change the properties of in the editor. So i made my class System.Serializable and made the variables public that i want to be able to change.
Like so:
[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;
}
But the problem i am having is that the GapAfterElementNumer is not show up in the editor at all the other fields are. How i can i make it so that int?
also shows up?
回答1:
Nullable types are not serialized in Unity Editor because it's serializer doesn't support null
.
There's a small workaround if you're not going to serialize this class to json using JsonUtility
.
The key idea is that you have to create your own nullable int. Something like
public class IntNullable
{
public int Value;
public bool HasValue;
}
Just like it's done inside .NET. Then you can create a Custom Editor for IntNullable
or your UIOptionsRing
. In this editor you can make a filed for int value and a button "Set Null", which will change the value of HasValue
variable. And further you need to work with this custom IntNullable
in your code.
来源:https://stackoverflow.com/questions/52854129/unity-doesnt-serialize-int-field