我有三个类,类
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
}
我能想到的唯一其他方法是为这两个类创建我自己的编辑器类,但如果可能的话我想避免这种情况......
查看自定义检查器:https://unity3d.com/learn/tutorials/modules/intermediate/editor/building-custom-inspector。这允许您为您喜欢的任何类型自定义检查器。
这肯定会起作用,尽管如果您的类型中有很多成员,这可能会很麻烦。除此之外我看不到太多机会。
看看[HideInInspector],您需要应用定义变量的属性。
Unity3d 文档站点中引用的示例(提供的帮助非常少......):
public class ExampleClass : MonoBehaviour
{
[HideInInspector]
public int p = 5;
}
我认为您的意思是是否可以在一个派生类中隐藏父(抽象)类的变量,并使其可从另一个派生类访问?如果我是对的,那么使用私有/受保护继承的 C# 就无法完成此操作,因为 C# 只允许公共继承。
在我的例子中,我可以创建一个抽象父类和两个继承它的新类,以及我想在 Inspector 中显示的新序列化值:
abstract class A{
protected int id;
}
class B : A{
private new int id = -1;
}
class C : A{
[SerializeField]
private new int id;
}