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

The*_*ler 10 unity-game-engine inspector

我试图在编辑器中显示一个二维数组,如Unity中显示的"图层碰撞矩阵": 在此输入图像描述

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

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

谢谢.

cjc*_*rie 7

你所寻找的代码涉及的代码非常复杂,所以我将依靠你来了解我在这里谈论的内容.Unity文档是你的朋友.

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

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

  3. 用于GUIUtility.RotateAroundPivot()围绕列锚点旋转GUI变换矩阵90°.

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

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

  6. 为行写标签.与两步的方法相同.将它们锚定在行锚点上.

  7. 这是更难的部分.通过您的数据域迭代,创建一个较小EditorGUI.IntField()或者StringField()甚至 ObjectField()为你的数据的每个元素.每个元素都需要自己的锚点,然后将其与数据字段锚点相加.如果您的数据字段是方形2D数组,那么派生锚点将很容易 - 尽管您的数组中也会有空元素(如果您想要上面描述的确切功能).如果你想节省内存,你必须使用一些棘手的数学将元素索引转换为坐标.我不确定我是怎么做到的.

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