如何绘制 Physics.OverlapBox 进行调试(一直在尝试使用 OnDrawGizmos)?
How to draw a Physics.OverlapBox for debugging (been trying with OnDrawGizmos)?
所以给定一个 Physics.OverlapBox 的位置、半边距和旋转,我将如何在屏幕上绘制它以进行调试。
如果我的重叠框总是旋转到 Quaternion.identity 那会很容易,我可以简单地调用
Gizmos.DrawWireCube 位置和半边距。但是它的方向不正确。据我了解,我可能需要先设置 Gizmos.matrix,但还没有找到任何可行的方法。
所以给我们的重叠框这些值
1) position
2) rotation
3) halfextents
我想我需要填写这些内容才能在屏幕上绘制它
Gizmos.matrix = ?
Gizmos.DrawWireCube(?, ?)
我尝试了很多不同的值和组合,但没有任何效果。有谁知道解决方案或可以让我走上正轨?也许我完全走错了路。任何建议表示赞赏。
编辑:注意我可以画一个 gizmos.wirecube 到屏幕上看,这没问题。但是,由于我希望它的方向正确,所以我开始使用 Gizmos.matrix。执行此操作后,我猜它突然消失在屏幕之外,因为我无法在任何地方找到它。
听起来你可以使用例如Matrix4x4.TRS
var oldMatrix = Gizmos.matrix;
// create a matrix which translates an object by "position", rotates it by "rotation" and scales it by "halfExtends * 2"
Gizmos.matrix = Matrix4x4.TRS(position, rotation, halfExtends * 2);
// Then use it one a default cube which is not translated nor scaled
Gizmos.DrawWireCube(Vector3.zero, Vector3.one);
Gizmos.matrix = oldMatrix;
在位置、旋转和缩放实际上来自 Transform
的情况下作为替代方案,例如
Transform someTransform;
var rotation = someTransform.rotation;
var position = someTransform.position;
var halfExtends = someTransform.lossyScale * 0.5f;
在那种情况下,您也可以简单地使用
Gizmos.matrix = someTransform.localToWorldMatrix;
Gizmos.DrawWireCube(Vector3.zero, Vector3.one);
这基本上意味着把这个 111 个立方体放在给定变换的局部 space 中,并将其“投影”到 world-space使用给定的矩阵。
所以给定一个 Physics.OverlapBox 的位置、半边距和旋转,我将如何在屏幕上绘制它以进行调试。
如果我的重叠框总是旋转到 Quaternion.identity 那会很容易,我可以简单地调用 Gizmos.DrawWireCube 位置和半边距。但是它的方向不正确。据我了解,我可能需要先设置 Gizmos.matrix,但还没有找到任何可行的方法。
所以给我们的重叠框这些值
1) position
2) rotation
3) halfextents
我想我需要填写这些内容才能在屏幕上绘制它
Gizmos.matrix = ?
Gizmos.DrawWireCube(?, ?)
我尝试了很多不同的值和组合,但没有任何效果。有谁知道解决方案或可以让我走上正轨?也许我完全走错了路。任何建议表示赞赏。
编辑:注意我可以画一个 gizmos.wirecube 到屏幕上看,这没问题。但是,由于我希望它的方向正确,所以我开始使用 Gizmos.matrix。执行此操作后,我猜它突然消失在屏幕之外,因为我无法在任何地方找到它。
听起来你可以使用例如Matrix4x4.TRS
var oldMatrix = Gizmos.matrix;
// create a matrix which translates an object by "position", rotates it by "rotation" and scales it by "halfExtends * 2"
Gizmos.matrix = Matrix4x4.TRS(position, rotation, halfExtends * 2);
// Then use it one a default cube which is not translated nor scaled
Gizmos.DrawWireCube(Vector3.zero, Vector3.one);
Gizmos.matrix = oldMatrix;
在位置、旋转和缩放实际上来自 Transform
的情况下作为替代方案,例如
Transform someTransform;
var rotation = someTransform.rotation;
var position = someTransform.position;
var halfExtends = someTransform.lossyScale * 0.5f;
在那种情况下,您也可以简单地使用
Gizmos.matrix = someTransform.localToWorldMatrix;
Gizmos.DrawWireCube(Vector3.zero, Vector3.one);
这基本上意味着把这个 111 个立方体放在给定变换的局部 space 中,并将其“投影”到 world-space使用给定的矩阵。