版本: Unity 6 (6000.0)
语言English
  • C#

Physics.CapsuleCastAll

建议修改

成功!

感谢您帮助我们改进 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们确实阅读了用户提出的每个建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们改进 Unity 文档的质量。

关闭

取消

声明

public static RaycastHit[] CapsuleCastAll(Vector3 point1, Vector3 point2, float radius, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

参数

point1 胶囊起始位置的球体的中心。
point2 胶囊结束位置的球体的中心。
radius 胶囊的半径。
direction 扫描胶囊的方向。
maxDistance 扫描的最大长度。
layermask 用于在投射胶囊时选择性地忽略碰撞器的图层蒙版
queryTriggerInteraction 指定此查询是否应命中触发器。

返回值

RaycastHit[] 扫描中命中的所有碰撞器的数组。

描述

Physics.CapsuleCast类似,但此函数将返回胶囊扫描与之相交的所有命中。

将胶囊投射到场景中的所有碰撞器上,并返回有关每个被击中碰撞器的详细信息。胶囊由围绕point1point2radius半径的两个球体定义,它们构成胶囊的两端。返回与所有碰撞器的命中,如果胶囊沿direction方向移动,这些碰撞器将与该胶囊发生碰撞。当射线投射无法提供足够的精度时,这很有用,因为您希望了解特定大小的对象(例如角色)是否能够移动到某个地方而不会与任何东西发生碰撞。

注意:对于在扫描开始时与胶囊重叠的碰撞器,RaycastHit.normal 设置为与扫描方向相反,RaycastHit.distance 设置为零,并且零向量在RaycastHit.point中返回。您可能希望检查您的特定查询中是否确实如此,并执行其他查询以细化结果。传递零半径会导致输出未定义,并且并不总是与Physics.Raycast的行为相同。

其他资源:Physics.SphereCastPhysics.CapsuleCastPhysics.RaycastRigidbody.SweepTest

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { void Update() { RaycastHit[] hits; CharacterController charCtrl = GetComponent<CharacterController>(); Vector3 p1 = transform.position + charCtrl.center + Vector3.up * -charCtrl.height * 0.5F; Vector3 p2 = p1 + Vector3.up * charCtrl.height;

// Cast character controller shape 10 meters forward, to see if it is about to hit anything hits = Physics.CapsuleCastAll(p1, p2, charCtrl.radius, transform.forward, 10);

// Change the material of all hit colliders // to use a transparent Shader for (int i = 0; i < hits.Length; i++) { RaycastHit hit = hits[i]; Renderer rend = hit.transform.GetComponent<Renderer>();

if (rend) { rend.material.shader = Shader.Find("Transparent/Diffuse"); Color tempColor = rend.material.color; tempColor.a = 0.3F; rend.material.color = tempColor; } } } }