point1 | 胶囊体在 start 处的球体中心。 |
point2 | 胶囊体在 end 处的球体中心。 |
radius | 胶囊体的半径。 |
direction | 扫描胶囊体的方向。 |
maxDistance | 扫描的最大长度。 |
layerMask | 层遮罩,用于在投射胶囊体时有选择地忽略碰撞体。 |
queryTriggerInteraction | 指定该查询是否应该命中触发器。 |
bool 当胶囊体扫描与任何碰撞体交叠时为 true,否则为 false。
向场景中的所有碰撞体投射胶囊体,并返回有关命中对象的详细信息。
胶囊体由中心位于 point1
和 radius
、半径为 radius
的两个球体界定,两个球体构成胶囊体的两个末端。
当胶囊体沿 direction
移动时,在遇到第一个会与其发生碰撞的碰撞体时返回命中。
当射线投射未提供足够的精度时,这很有用。例如,您可能只想知道某个具有特定大小的对象,比如某个角色,
能否在沿途不与任何对象发生碰撞的情况下到达某个地方。
注意:对于胶囊体与碰撞体重叠的情况,CapsuleCast 不会检测到碰撞体。传递零作为半径会导致未定义的输出,其行为并不总是与 Physics.Raycast 相同。
另请参阅:Physics.SphereCast、Physics.CapsuleCastAll、Physics.Raycast、Rigidbody.SweepTest。
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { void Update() { RaycastHit hit; CharacterController charContr = GetComponent<CharacterController>(); Vector3 p1 = transform.position + charContr.center + Vector3.up * -charContr.height * 0.5F; Vector3 p2 = p1 + Vector3.up * charContr.height; float distanceToObstacle = 0;
// Cast character controller shape 10 meters forward to see if it is about to hit anything. if (Physics.CapsuleCast(p1, p2, charContr.radius, transform.forward, out hit, 10)) distanceToObstacle = hit.distance; } }
point1 | 胶囊体在 start 处的球体中心。 |
point2 | 胶囊体在 end 处的球体中心。 |
radius | 胶囊体的半径。 |
direction | 扫描胶囊体的方向。 |
maxDistance | 扫描的最大长度。 |
hitInfo | 如果返回 true,则 hitInfo 将包含有关碰撞体的撞击位置的更多信息(另请参阅:RaycastHit)。 |
layerMask | 层遮罩,用于在投射胶囊体时有选择地忽略碰撞体。 |
queryTriggerInteraction | 指定该查询是否应该命中触发器。 |