Unity Editor脚本:类似于BoxCollider的场景控件

时间:2019-10-24 05:51:06

标签: unity3d unity-editor

我遇到了几种使用Bounds进行“ Faking”碰撞的场景-主要是当我只需要将对象保持在某个区域内(使用Bounds.Contains)并且不想参加物理学。

我知道我可以为此使用触发器,但这需要一个专用图层,由于我的游戏不在图层中,因此这不是一个选择。

我创建了一个简单的BoundsHolder脚本,该脚本使用本地大小/中心来计算边界。 我使用Gizmos.DrawWireCube在编辑器中显示它们-如下所示效果很好:

Custom Bounds Holder inspector + scene gizmo

但是我想添加BoxCollider用于扩大边界的拖动控件:

Unity BoxCollider Scene gizmo with drag-to-enlarge handles

我在Google +周围搜索过,浏览了GizmosHandles的文档-但是其中的所有功能似乎都是关于绘制立方体的,而不是调整工具的大小。

是否有内置工具来重新创建我所缺少的内容?

否则-什么是最好的方法?


奖金问题-我的BoundsHolder使用UnityEngine.Bounds,它是与轴对齐的,不支持旋转。是否有支持轮换的替代版本? (并且仍然提供Contains(Vector3) API?)

谢谢

2 个答案:

答案 0 :(得分:0)

是的,手柄既可以绘制东西,又可以交互作用-因此您实际上可以抓住手柄。 Afaik您必须自己实现缩放框。但是Handles.ScaleHandle可能会有所帮助。或创建一个Slider to move along one axis

对于Box-Collider-Trigger事情,您可以查看Physics.CheckBox(对于具有方向的盒子来说,是true / false hitTest)

或进入 Physics.OverlapBox(向您提供内部的游戏对象列表-如果您愿意,可以像“包含”一样使用)

由于您不需要额外的图层,可以将layermask设置为“ everything”,然后检查对象引用或标签以确保您拥有正确的对象。

答案 1 :(得分:0)

存在使用矩阵作为管线的渲染机制。因此,如果您想使其移动,缩放,旋转 使矩阵做到这一点,如果我做同样的工作,那么我将从“ transform.localToWorldMatrix”开始

Matrix4x4 matrix4x4 = transform.localToWorldMatrix;

矩阵A

0 0 0 T

0 0 0 T

0 0 0 T

0 0 0 0

该矩阵的“矩阵A”部分,“ T”部分,因此您可以更改或添加偏移量以从当前gameObject中移出更多内容。 然后,应用它进行绘制,就像

public void OnDrawGizmosSelected()
{
    Matrix4x4 matrix4x4 = transform.localToWorldMatrix;

    ....
    ....
    do something with "matrix4x4" here


    Gizmos.matrix = matrix4x4; // apply matrix to move/scale/rotate
    Gizmos.DrawCube(..)
}