我有一个自定义结构,带有以下代码:
[Serializable]
public struct HexPoint : IEquatable<HexPoint>
{
public readonly int x;
public readonly int y;
public readonly int z;
// Some custom methods for initializations and operators
}
如果我将x,y和z变量设置为非只读,则它们会很好地显示在统一检查器中。但是,我有一些他们需要满足的规则(实际上x + y + z = 0),因此我添加了只读权限,以防止人们惹它。
但是作为只读变量,它们不会显示(因为它们不能被修改)! :(
我想知道它们是否是我可以在统一检查器中显示它们的一种方式,它类似于PropertyDrawer。我知道我可以将结构切换到类,因为PropertyDrawer是为类保留的,但是我想将其保留为结构。
那么,有没有一种显示值的方法?最终使用自定义初始化程序修改它们?
非常感谢!
答案 0 :(得分:3)
readonly
也使它们也non-serialized
->在检查器中不显示
实际上不需要CustomPropertyDrawer
。
您可以使用公开的只读properties来访问私有字段,并使用[SerializeField]
将其显示在检查器中:
[Serializable]
public struct HexPoint : IEquatable<HexPoint>
{
// Those are not displayed in the inspector,
// readonly and accessible by other classes
public int x { get { return _x; }}
public int y { get { return _y; }}
public int z { get { return _z; }}
// if you prefer you can also use the expression body style instead
//public int x => _x;
//public int y => _y;
//public int z => _z;
// Those are displayed in the Inspector
// but private and therefor not changable by other classes
[SerializeField] private int _x;
[SerializeField] private int _y;
[SerializeField] private int _z;
}
提示,检查更改MonoBehaviour.OnValidate后的值可能对您来说很有趣