2
public static bool BoxCast(Vector3 center,
                           Vector3 halfExtents,
                           Vector3 direction,
                           Quaternion orientation = Quaternion.identity, 
                           float maxDistance = Mathf.Infinity,
                           ...);

这些是 Unity3D 中 boxcast 的参数。我对maxDistance参数的用途感到困惑,因为我们已经用参数绘制了框halfExtents。如果我不想移动盒子怎么办?即,我想绘制一个框并获取有关其中内容的信息。我不想移动盒子。usingmaxDistance = 0似乎什么都不做,因为它没有记录任何命中。使用maxDistance > 0会移动盒子,我希望避免这种情况。

如何使用 BoxCast(),避免移动盒子?

4

3 回答 3

5

Physics.OverlapBox,也许这会更适合您的需求?

public static Collider[] OverlapBox(Vector3 center, Vector3 halfExtents, 
      Quaternion orientation = Quaternion.identity, 
      int layerMask = AllLayers, 
      QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

https://docs.unity3d.com/ScriptReference/Physics.OverlapBox.html

或者即使Physics.CheckBox你不在乎盒子里到底有什么。

https://docs.unity3d.com/ScriptReference/Physics.CheckBox.html

于 2018-08-19T20:33:04.920 回答
1

任何Physics.^shape^Cast()调用都只是具有维度的光线投射。在您的情况下, BoxCast 沿着射线推动一个盒子并检查它与什么相交maxDistance(注意:“盒子”不是真实的对象)。

你要的是Physics.Overlap^shape^(). 在您的情况下, OverlapBox 将返回该框中的所有对撞机作为数组。您需要了解的有关框中对象的任何信息,您都可以在脚本中解析出来。

请参阅@Frederik Widerberg对 OverlapBox 链接的回答=)

于 2018-08-21T07:29:10.420 回答
0

. 有论据,

. _position:即将被投射的立方体的位置

. Vector3(0.5f, 0.5f, 0.5f) :假设您的单位 cude 大小为 1.0

. _directionVector:3D 中的施法方向,例如
Vector3 directionVector = _positon - positionWhereFrom(立方体的施法方向)

. Quaternion.LookRotation(_directionVector):将方向视为方向

. 0.0f : 没有光线投射距离,就地盒子****

. _movementControlLayerMaskValue : 你想和你的演员交互的图层 ex:_movementControlLayerMaskValue = LayerMask.GetMask("Default");

Physics.BoxCast(_position,new Vector3(0.5f, 0.5f, 0.5f),_directionVector, Quaternion.LookRotation(_directionVector),0.0f,_movementControlLayerMaskValue);

于 2020-10-10T13:49:36.740 回答