Unity自定义编辑器就像'图层碰撞矩阵'

时间:2012-11-13 15:00:37

标签: unity3d inspector

我正在尝试在编辑器中显示二维数组,如Unity中显示的“图层碰撞矩阵”: enter image description here

虽然代替复选框,我需要整数和一个完整的网格(不是三角形)。我似乎无法弄清楚如何做到这一点...我可以得到一个自定义编辑器,虽然使网格失败。那么,有什么方法可以看到物理管理器编辑器的代码(层碰撞矩阵在那里)或者有人知道这样做的好方法吗?

注意:首选语言是c#,但任何语言都可以。

感谢。

1 个答案:

答案 0 :(得分:7)

你所寻找的代码涉及的代码非常复杂,所以我将依靠你来了解我在这里谈论的内容。 The Unity docs are your friend.

  1. 创建一个GUIArea,其中包含您的特殊编辑器工具。在里面,放置一个 然后调用其他渲染函数的函数调用。一世 怀疑你想在这里做一些封装。将gui封装在另一个函数中将允许您复制其功能(在抽象的限制范围内)并更容易在屏幕上移动。

  2. 设计三个锚点(Vector2)。它们应该分别代表左上角 行标签,列标签和数据字段的坐标。注意 列锚点需要直接在上面(与x值相同) 行锚,因为旋转(下一步)将转换锚。

  3. 使用GUIUtility.RotateAroundPivot()旋转GUI转换 矩阵围绕柱锚点旋转90°。

  4. 为您的标签写一个长GUI.Label(或其中几个)。 将它们锚定在列锚点上。根据上图,您的标签 字符串可以读取像 \ n \ n \ n“默认\ nTransparentFX \ nIgnoreRaycast \ nWater”,\ n创建 换行。

  5. 再次旋转,-90°回到原始矩阵。或者,你 可以在步骤3之前复制GUI.matrix,然后将其分配回来 保证矩阵重置。由于浮点和其他不精确性,来回旋转可能会有一些错误。

  6. 为行写标签。与两步的方法相同。锚 他们在行锚。

  7. 这是更难的部分。遍历您的数据字段,创建一个 小EditorGUI.IntField()StringField()或甚至 数据中每个元素的ObjectField()。每个元素都会 需要自己的锚点,然后将其与数据字段锚点相加。 如果您的数据字段是方形2D数组,则导出锚点 很容易 - 虽然你的阵列中也有空元素(如果 你想要上面描述的确切功能。如果你想 节省内存,你必须将元素索引转换为 坐标使用一些棘手的数学。我不确定我的最高层 我要怎么做。

  8. 希望我不会忘记任何事情。 Unity的GUI是一个b ----。评论,我会尽力帮助你。

相关问题