Physics.CapsuleCastAll
Declaration
public static RaycastHit[] CapsuleCastAll(Vector3 point1, Vector3 point2, float radius, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);Параметры
| Параметр | Описание |
|---|---|
| point1 | Центр сферы в start капсулы. |
| point2 | Центр сферы в end капсулы. |
| радиус | Радиус капсулы. |
| направление | Направление, в котором должна перемещаться капсула. |
| maxDistance | Максимальная длина развертки. |
| layerMask | Маска слоя Маска слоя, которая используется для выборочной фильтрации коллайдеров, которые рассматриваются при отливке капсулы. |
| queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры. |
Возвращаемое значение
RaycastHit[] Массив всех коллайдеров, попавших в зонд.
Описание
Как и Physics.CapsuleCast, но эта функция возвращает все попадания, пересекающиеся с капсулой.
Бросает капсулу на все коллайдеры в Scene и возвращает подробную информацию о каждом коллайдере, в который она попала. Капсула определяется двумя сферами с radius вокруг point1 и point2, которые образуют два конца капсулы. Попадания возвращаются на все коллайдеры, которые столкнутся с этой капсулой, если капсула будет перемещена вдоль direction. Это полезно, когда Raycast не дает достаточной точности, потому что вы хотите узнать, сможет ли объект определенного размера, например, персонаж, переместиться куда-то без столкновения с чем-либо на пути.
Примечания: Для коллайдеров, которые перекрывают капсулу в начале прохождения, RaycastHit.normal устанавливаются в направлении, противоположном направлению прохождения, RaycastHit.distance устанавливаются на нуль, и нулевой вектор возвращается в RaycastHit.point. Вы можете пожелать проверить, так ли это в вашем конкретном запросе и выполнить дополнительные запросы для уточнения результата. Передача нулевого радиуса приводит к неопределенному выходу и не всегда ведет себя так же, как Physics.Raycast.
Дополнительные ресурсы: Physics.SphereCast, Physics.CapsuleCast, Physics.Raycast, Rigidbody.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; } } } }