如何使用 [SerializeField] 隐藏私有变量继承自 Unity3d 的检查器中的基础 class

How to hide the private variable with [SerializeField] inherit from the base class in the Inspector in Unity3d

当我有一个 private 变量 id 时,我在定义它之前写 [SerializeField]:

class A{
   [SerializeField]
   private int id;
}

还有,我还有一个class

Class B : A{
}

当我在一个对象上添加组件 B 时,我可以在检查器中看到变量 id,我该如何隐藏它?

我认为唯一的方法是构建自定义检查器: http://unity3d.com/learn/tutorials/modules/intermediate/editor/building-custom-inspector

编写自定义检查器很好,但如果您唯一需要更改的是序列化字段的可见性,则通常很乏味。

在序列化字段之前尝试 [HideInInspector] 属性。它将被序列化但不会在检查器中显示。


编辑

这里有一些参考资料可以帮助您理解序列化:ref1, ref2

我会尽量简单地解释一下:

The process of setting the fields of your objects, and getting them, is called deserialization and serialization respectively. Unity's serializer is able to serialize many different kinds of fields, but not all of them.

简而言之:

序列化

是用来表示从运行内存到外部的每一个数据流的术语(比如检查器,磁盘上的文件,...)

序列化

这个术语用来表示每个流向运行时内存的数据流向外部(即在检查器中更改一个值,序列化程序线程会将其反序列化到运行时内存中)。

要点是在某些情况下您希望序列化给定字段(即保存到磁盘上的预制件中)但不想在检查器中显示它。 如果是这种情况,重写整个检查器就太过分了。请改用 [HideInInspector] 属性。

如果您不希望它被序列化或在检查器中显示,只需将其设置为私有而不使用 [SerializedField] 或 public 并将其标记为 [NonSerialized].