public static bool CapsuleCast (Vector3 point1, Vector3 point2, float radius, Vector3 direction, float maxDistance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction= QueryTriggerInteraction.UseGlobal);

参数

point1胶囊体在 start 处的球体中心。
point2胶囊体在 end 处的球体中心。
radius胶囊体的半径。
direction扫描胶囊体的方向。
maxDistance扫描的最大长度。
layerMask 层遮罩,用于在投射胶囊体时有选择地忽略碰撞体。
queryTriggerInteraction指定该查询是否应该命中触发器。

返回

bool 当胶囊体扫描与任何碰撞体交叠时为 true,否则为 false。

描述

向场景中的所有碰撞体投射胶囊体,并返回有关命中对象的详细信息。

胶囊体由中心位于 point1radius、半径为 radius 的两个球体界定,两个球体构成胶囊体的两个末端。 当胶囊体沿 direction 移动时,在遇到第一个会与其发生碰撞的碰撞体时返回命中。 当射线投射未提供足够的精度时,这很有用。例如,您可能只想知道某个具有特定大小的对象,比如某个角色, 能否在沿途不与任何对象发生碰撞的情况下到达某个地方。

**注意:**对于胶囊体与碰撞体重叠的情况,CapsuleCast 不会检测到碰撞体。传递零作为半径会导致未定义的输出,其行为并不总是与 Physics.Raycast 相同。

另请参阅:Physics.SphereCastPhysics.CapsuleCastAllPhysics.RaycastRigidbody.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; } }

public static bool CapsuleCast (Vector3 point1, Vector3 point2, float radius, Vector3 direction, out RaycastHit hitInfo, float maxDistance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction= QueryTriggerInteraction.UseGlobal);

参数

point1胶囊体在 start 处的球体中心。
point2胶囊体在 end 处的球体中心。
radius胶囊体的半径。
direction扫描胶囊体的方向。
maxDistance扫描的最大长度。
hitInfo如果返回 true,则 hitInfo 将包含有关碰撞体的撞击位置的更多信息(另请参阅:RaycastHit)。
layerMask 层遮罩,用于在投射胶囊体时有选择地忽略碰撞体。
queryTriggerInteraction指定该查询是否应该命中触发器。

描述