【问题标题】:Unity Serializable Class Custom InspectorUnity Serializable 类自定义检查器
【发布时间】:2012-11-01 23:25:21
【问题描述】:

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

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

这会显示在检查器中(如果我创建了这种类型的公共变量。)虽然它的默认显示方式不是很好:

现在,我想知道如何改变这一点?我找到了如何更改单一行为的检查员,但找不到如何更改其他类的检查员。我希望它只是彼此相邻的两个数字,如下所示:

这只是一件小事,如果不可能,也不是什么大问题,尽管知道如何做也会在以后证明更有用。

哦,是的,您可能已经注意到,我使用的是 c#,所以如果有任何示例代码在 c# 中,那就太好了。

谢谢。

【问题讨论】:

  • 检查器中是否还有其他类型可以执行此操作?如果是这样,也许看看它们是如何实现的(特别是,它们是否有任何有趣的属性、接口或自定义 ToString 等)
  • Unity 的 Vector3 在变换中执行此操作。虽然也许这只是具有自定义检查器以使 Vector3 看起来更好的转换。虽然 Unity 不是开源的,所以你看不到转换的代码 :(
  • 是的,但是类型元数据肯定可以通过反射获得吗?所以你应该仍然可以看到属性和接口......它甚至应该只在对象浏览器中可用。
  • 有没有一个地方可以让我找到你知道的那些在我之前已经这样做过的人的源代码?还是我必须自己做?

标签: c# unity3d inspector


【解决方案1】:

在更高版本的 Unity 中不再适用。

刚刚发现这是不可能的。

做到这一点的唯一方法是,每当您在单一行为中使用它时,为该单一行为提供一个自定义检查器,并在其中为该类提供您的自定义布局。为了使这更容易,您可以创建一个执行布局的方法,然后在每个单一行为中使用它。

【讨论】:

    【解决方案2】:

    在 Unity4 中,您可以使用 PropertyDrawer 进行此操作

    【讨论】:

      【解决方案3】:

      一种需要编写较少自定义检查器的解决方案是使UnitRange 成为一个组件。任何需要UnitRange 的内容都可以使用[RequireComponent (typeof (UnitRange))] 进行注释,这样您就不必自己添加它了。让UnitRange 检查它是唯一附加的(如果不是,则错误/删除自身等)。

      然后使用GetComponent<UnitRange>() 使您的各个单元缓存附加的单元范围组件在Start() 上,以供以后使用(就像您目前所做的那样,如果您只是将可见性更改为私有并重用)。

      最后 - 为 UnitRange 编写看起来不错的检查器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多