Объявление
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.
Описание
Выбрасывает капсулу на все коллайдеры в сцене и возвращает подробную информацию о том, что было поражено.
Капсула определяется двумя сферами с radius
вокруг point1
и point2
, которые образуют два конца капсулы.
Попадания возвращаются для первого коллайдера, который столкнулся бы с этой капсулой, если бы капсула была перемещена в direction
. Это полезно, когда Raycast не дает достаточной точности, потому что вы хотите узнать, сможет ли объект определенного размера, например персонаж, двигаться куда-то, не сталкиваясь ни с чем на пути.
Примечания. CapsuleCast не будет обнаруживать коллайдеры, для которых капсула перекрывает коллайдер. Передача нулевого радиуса приводит к неопределенным результатам и не всегда ведет себя так же, как 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;
// Бросаем фигуру контроллера персонажа на 10 метров вперед, чтобы увидеть, не заденет ли она что-нибудь.
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 | Указывает, должен ли этот запрос вызывать триггеры. |