point1 | 胶囊中 开始 处的球体中心。 |
point2 | 胶囊中 结束 处的球体中心。 |
radius | 胶囊的半径。 |
direction | 划动胶囊的方向。 |
maxDistance | 划动的最大长度。 |
layerMask | 用于在投射胶囊时有选择地忽略碰撞体的层蒙版。 |
queryTriggerInteraction | 指定此查询是否应命中触发器。 |
胶囊划动与任何碰撞体相交时为 bool,否则为 false。
对场景中的所有碰撞体投射一个胶囊,并返回击中内容的详细信息。
胶囊由 point1
和 point2
周围半径为 radius
的两个球体定义,它们形成了胶囊的两端。当胶囊沿着 direction
移动后,将返回与该胶囊相撞的第一个碰撞体的击中信息。这在光线投射精度不够的情况下非常有用,因为你想查明特定大小的对象(例如角色)能否在某处移动而不与路径上的任何内容相撞。
注意:CapsuleCast 不会检测胶囊与之重叠的碰撞体。传递半径为 0 时会导致未定义的输出,并且并不始终与 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 | 胶囊中 开始 处的球体中心。 |
point2 | 胶囊中 结束 处的球体中心。 |
radius | 胶囊的半径。 |
direction | 划动胶囊的方向。 |
maxDistance | 划动的最大长度。 |
hitInfo | 如果返回 true,hitInfo 将包含有关光线投射击中碰撞体的更多信息。(其他资源:RaycastHit)。 |
layerMask | 用于在投射胶囊时有选择地忽略碰撞体的层蒙版。 |
queryTriggerInteraction | 指定此查询是否应命中触发器。 |