如何在不移动框的情况下BoxCast()?

时间:2018-08-19 20:18:32

标签: c# unity3d collision-detection collider

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

这些是Unity3D中Boxcast的参数。我对maxDistance参数的用途感到困惑,因为我们已经用halfExtents参数画了框。如果我不想移动盒子怎么办?即,我想画一个盒子并获取有关其中任何内容的信息。我不想移动盒子。使用maxDistance = 0似乎无济于事,因为它不会记录任何匹配。使用maxDistance > 0将移动该框,我希望避免这种情况。

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

任何Physics.^shape^Cast()呼叫都只是带有维度的射线广播。在您的情况下,BoxCast会沿光线推动一个盒子并检查其相交的位置,直到maxDistance(注意:“盒子”不是真实的对象)。

您要的是Physics.Overlap^shape^()。在您的情况下,OverlapBox将以数组的形式返回该框中的所有对撞机。您需要了解框中的对象的所有信息,然后可以在脚本中对其进行解析。

请参见@ Frederik Widerberganswer,了解OverlapBox链接=)

答案 2 :(得分:0)

。加上参数,

。 _position:要投放的立方体的位置

。 Vector3(0.5f,0.5f,0.5f):假设单位尺寸为1.0

。 _directionVector:例如以3D模式投射的方向
Vector3 directionVector = _positon-positionWhereFrom(多维数据集的投射方向)

。 Quaternion.LookRotation(_directionVector):以方向作为方向

。 0.0f:无射线投射距离,在适当的位置****

。 _movementControlLayerMaskValue:要与演员表互动的图层 例如:_movementControlLayerMaskValue = LayerMask.GetMask(“默认”);

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