隐藏一类检查器中的字段,但不隐藏另一类

问题描述 投票:0回答:4

我有三个类,类

A
是抽象类,类
B
C
扩展了它。

有没有办法让我在将

A
放在游戏对象上时隐藏类
C
中的属性,并在将类
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# unity-game-engine
4个回答
1
投票

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

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


0
投票

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

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

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

0
投票

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


0
投票

在我的例子中,我可以创建一个抽象父类和两个继承它的新类,以及我想在 Inspector 中显示的新序列化值:

abstract class A{
   protected int id;
}

class B : A{
 private new int id = -1;
}

class C : A{
   [SerializeField]
   private new int id;
}
© www.soinside.com 2019 - 2024. All rights reserved.