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

Physics.CapsuleCast

Declaration

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 капсулы.
радиус Радиус капсулы.
направление Направление, в котором должна перемещаться капсула.
maxDistance Максимальная длина развертки.
layerMask Маска слоя Маска слоя, которая используется для выборочной фильтрации коллайдеров, которые рассматриваются при отливке капсулы.
queryTriggerInteraction Указывает, должен ли этот запрос вызывать триггеры.

Возвращаемое значение

логическое True, если капсула пересекает любой коллайдер, в противном случае false.

Описание

Бросает капсулу на все коллайдеры в Scene и возвращает подробную информацию о том, что попало.

Капсула определяется двумя сферами с 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;

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

Declaration

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 капсулы.
радиус Радиус капсулы.
направление Направление, в котором должна перемещаться капсула.
maxDistance Максимальная длина развертки.
hitInfo Если вернётся true, hitInfo будет содержать больше информации о месте удара коллайдера. (Дополнительные ресурсы: RaycastHit).
layerMask Маска слоя Маска слоя, которая используется для выборочной фильтрации коллайдеров, которые рассматриваются при отливке капсулы.
queryTriggerInteraction Указывает, должен ли этот запрос вызывать триггеры.

Возвращаемое значение

логическое True, если капсула пересекает любой коллайдер, в противном случае false.

Описание

Бросает капсулу вдоль луча и сообщает о первом попадании в коллайдер. Помимо проверки на столкновения, эта перегрузка предоставляет подробную информацию о попадании в коллайдер через параметр out RaycastHit hitInfo. Капсула определяется двумя сферами radius, центрированными на point1 и point2. Они определяют начало и конец оси капсулы. Затем капсула перемещается в direction на максимальное расстояние maxDistance. Это особенно полезно, когда вы хотите симулировать движение объемного объекта (например, персонажа или транспортного средства) и нужно определить, где, что и как он ударился о что-то.

using UnityEngine;

public class CapsuleCastExample : MonoBehaviour { public Transform pointStart; public Transform pointEnd; public float radius = 0.5f; public float maxDistance = 10f;

void Update() { RaycastHit hit; Vector3 direction = transform.forward;

if (Physics.CapsuleCast(pointStart.position, pointEnd.position, radius, direction, out hit, maxDistance)) { Debug.Log("Hit: " + hit.collider.name + " at " + hit.point); } } }