我遇到了几种使用Bounds
进行“ Faking”碰撞的场景-主要是当我只需要将对象保持在某个区域内(使用Bounds.Contains
)并且不想参加物理学。
我知道我可以为此使用触发器,但这需要一个专用图层,由于我的游戏不在图层中,因此这不是一个选择。
我创建了一个简单的BoundsHolder
脚本,该脚本使用本地大小/中心来计算边界。
我使用Gizmos.DrawWireCube
在编辑器中显示它们-如下所示效果很好:
但是我想添加BoxCollider
用于扩大边界的拖动控件:
我在Google +周围搜索过,浏览了Gizmos
和Handles
的文档-但是其中的所有功能似乎都是关于绘制立方体的,而不是调整工具的大小。
是否有内置工具来重新创建我所缺少的内容?
否则-什么是最好的方法?
奖金问题-我的BoundsHolder使用UnityEngine.Bounds
,它是与轴对齐的,不支持旋转。是否有支持轮换的替代版本? (并且仍然提供Contains(Vector3)
API?)
谢谢
答案 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(..)
}