Unity可序列化类自定义检视面板

6

我有一个非常简单的Unity类,UnitRange(它具有最小范围和最大范围)。

[System.Serializable]
public class UnitRange {
    public int Minimum;
    public int Maximum;
}

这将显示在检查器中(如果我制作此类型的公共变量)。虽然默认显示方式不太好:
现在,我想知道如何更改它?我找到了如何更改monobehaviours的检查器,但找不到如何更改其他类的检查器。我希望它只是两个数字并排,类似于这样:
这只是一个小问题,如果不可能的话也不是很大的问题,不过知道如何做可能以后也更有用。
哦,是的,你可能已经注意到了,我正在使用c#,所以如果有任何示例代码,请用c#编写。
谢谢。

检查器中是否有其他类型也能做到这一点?如果是这样,可以看看它们是如何实现的(特别是它们是否具有任何有趣的属性、接口或自定义ToString等)。 - Marc Gravell
Unity的Vector3在transform中实现。虽然可能只是transform具有自定义检查器,使Vector3看起来更好。但是Unity不是开源的,所以您无法查看transform的代码:( - The Oddler
是的,但通过反射仍然可以访问类型元数据。因此,您仍然可以查看属性和接口... 甚至可以直接在对象浏览器中查看。 - Marc Gravell
有没有你知道的地方,我可以找到已经在我之前做过这件事情的人的源代码?还是我必须自己动手呢? - The Oddler
3个回答

2

在较新版本的Unity中,这已经不再是真实的。

刚发现这是不可能的。

唯一的方法是,在每次在Monobehaviour中使用它时,给该Monobehaviour一个自定义检查器,并在其中为该类提供自定义布局。为了更加方便,您可以编写一个方法来进行布局,然后在每个Monobehaviour中使用它。


1

0
一个减少编写自定义检查器的解决方案是将 UnitRange 设为组件。任何需要 UnitRange 的内容都可以用 [RequireComponent (typeof (UnitRange))] 进行注释,这样就不必费力手动添加了。让 UnitRange 检查它是否是唯一附加的组件(如果不是,则出错/删除等)。
然后,在 Start() 中使各种单位缓存所附加的单位范围组件,使用 GetComponent<UnitRange>(),以备后用(就像您目前所做的那样,只需将可见性更改为私有并重用)。
最后 - 编写 UnitRange 的检查器,使其看起来漂亮。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接