【问题标题】:How to hide the private variable with [SerializeField] inherit from the base class in the Inspector in Unity3d如何使用[SerializeField]隐藏私有变量继承自Unity3d中Inspector中的基类
【发布时间】:2015-07-13 22:19:08
【问题描述】:

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

class A{
   [SerializeField]
   private int id;
}

还有,我还有一门课

Class B : A{
}

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

【问题讨论】:

    标签: c# unity3d inspector


    【解决方案1】:

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

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


    编辑

    这里有一些理解序列化的参考:ref1ref2

    我会尽量简单解释一下:

    设置对象字段并获取它们的过程, 分别称为反序列化和序列化。团结的 序列化程序能够序列化许多不同类型的字段,但是 不是全部。

    简而言之:

    序列化

    这个术语用来表示从运行时内存到外部的每个数据流(例如检查器、磁盘上的文件……)

    序列化

    该术语用于指示流向运行时内存的每个数据流到外部(例如,更改检查器中的值,序列化程序线程会将其反序列化到运行时内存中)。

    重点是在某些情况下,您希望对给定字段进行序列化(例如,将其保存到磁盘上的预制件中),但又不想在检查器中显示它。 如果是这种情况,重写整个检查器是一种矫枉过正。请改用[HideInInspector] 属性。

    如果您不希望它被序列化或显示在检查器中,只需将其设为不带[SerializedField] 的私有或公共并将其标记为[NonSerialized]

    【讨论】:

    • 序列化和inspector中显示有什么区别?
    【解决方案2】:

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

    【讨论】:

    • 哇~看起来棒极了。上个月,我研究AssetBundles,发现我可以换编辑器,这对我来说是新的。现在我发现我可以换inspector了。 Unity 真的让我大吃一惊。
    • 那么我能得到最佳答案吗?
    • 当然可以,但我不知道如何选择您的最佳答案。接受?
    • 点击左侧的“勾号”图标。
    • 您是否尝试过让您的自定义检查员?我有很多课,所以我必须创建很多编辑器脚本?好难过。
    猜你喜欢
    • 1970-01-01
    • 2013-03-11
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 2018-09-19
    • 2014-11-17
    相关资源
    最近更新 更多