我正在尝试在编辑器中显示二维数组,如Unity中显示的“图层碰撞矩阵”:
虽然代替复选框,我需要整数和一个完整的网格(不是三角形)。我似乎无法弄清楚如何做到这一点...我可以得到一个自定义编辑器,虽然使网格失败。那么,有什么方法可以看到物理管理器编辑器的代码(层碰撞矩阵在那里)或者有人知道这样做的好方法吗?
注意:首选语言是c#,但任何语言都可以。
感谢。
答案 0 :(得分:7)
你所寻找的代码涉及的代码非常复杂,所以我将依靠你来了解我在这里谈论的内容。 The Unity docs are your friend.
创建一个GUIArea
,其中包含您的特殊编辑器工具。在里面,放置一个
然后调用其他渲染函数的函数调用。一世
怀疑你想在这里做一些封装。将gui封装在另一个函数中将允许您复制其功能(在抽象的限制范围内)并更容易在屏幕上移动。
设计三个锚点(Vector2
)。它们应该分别代表左上角
行标签,列标签和数据字段的坐标。注意
列锚点需要直接在上面(与x值相同)
行锚,因为旋转(下一步)将转换锚。
使用GUIUtility.RotateAroundPivot()
旋转GUI转换
矩阵围绕柱锚点旋转90°。
为您的标签写一个长GUI.Label
(或其中几个)。
将它们锚定在列锚点上。根据上图,您的标签
字符串可以读取像
\ n \ n \ n“默认\ nTransparentFX \ nIgnoreRaycast \ nWater”,\ n创建
换行。
再次旋转,-90°回到原始矩阵。或者,你
可以在步骤3之前复制GUI.matrix
,然后将其分配回来
保证矩阵重置。由于浮点和其他不精确性,来回旋转可能会有一些错误。
为行写标签。与两步的方法相同。锚 他们在行锚。
这是更难的部分。遍历您的数据字段,创建一个
小EditorGUI.IntField()
或StringField()
或甚至
数据中每个元素的ObjectField()
。每个元素都会
需要自己的锚点,然后将其与数据字段锚点相加。
如果您的数据字段是方形2D数组,则导出锚点
很容易 - 虽然你的阵列中也有空元素(如果
你想要上面描述的确切功能。如果你想
节省内存,你必须将元素索引转换为
坐标使用一些棘手的数学。我不确定我的最高层
我要怎么做。
希望我不会忘记任何事情。 Unity的GUI是一个b ----。评论,我会尽力帮助你。