Unity 6.3
0 онлайн 77 гостей 3 в системе
Вход

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; } } } }