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()避免移动盒子?
答案 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 Widerberg的answer,了解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);