【问题标题】:Hide field in inspector in one class but not the other在一个类中隐藏检查器中的字段,但在另一个类中隐藏字段
【发布时间】:2015-12-28 08:01:36
【问题描述】:

我有三个类,A 类是抽象类,BC 类扩展它。

当我将C 放置在游戏对象上时,我是否可以隐藏A 类中的属性,并在我将B 类放置在游戏对象上时显示它?

public abstract class A : MonoBehaviour {
    public float myFloat = 0f;
}

public class B : A {
    // Show myFloat in inspector
}

public class C : A {
    // Do not show myFloat in inspector
}

我能想到的唯一其他方法是为这两个类创建自己的编辑器类,但如果可能的话,我想避免这种情况......

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    查看自定义检查器:https://unity3d.com/learn/tutorials/modules/intermediate/editor/building-custom-inspector。这允许您为您喜欢的任何类型自定义检查器。

    这肯定会起作用,但如果您的类型中有很多成员,这可能会很麻烦。除此之外,我看不到太多机会。

    【讨论】:

    • 这是我决定要做的。
    【解决方案2】:

    看看[HideInInspector],需要在定义变量的地方应用属性。

    Unity3d 文档站点中引用的示例(提供的帮助很少...):

    public class ExampleClass : MonoBehaviour 
    {
        [HideInInspector]
        public int p = 5;
    }
    

    【讨论】:

    • 这会将它隐藏在BC 虽然
    • @GetOffMyLawn 是的,据我所知。这是迄今为止我找到的唯一方法。
    【解决方案3】:

    我认为您的意思是您是否可以在一个派生类中隐藏父(抽象)类的变量,并让另一个派生类可以访问它?如果我是对的,那么 C# 不能使用私有/受保护的继承来完成,因为 C# 只允许公共继承。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 2023-03-03
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      相关资源
      最近更新 更多