NavMesh.Raycast
Declaration
public static bool Raycast(Vector3 sourcePosition, Vector3 targetPosition, out AI.NavMeshHit hit, int areaMask);Параметры
| Параметр | Описание |
|---|---|
| sourcePosition | Происхождение луча. |
| targetPosition | Конец луча. |
| хит | Содержит свойства полученного в результате отражения луча местоположения. |
| areaMask | Маска битполя, указывающая, какие области NavMesh могут быть переданы при отслеживании луча. |
Возвращаемое значение
логическое True, если луч прекращается до достижения целевой позиции. В противном случае возвращает false.
Описание
Проведите линию между двумя точками на NavMesh.
Точки источника и назначения сначала отображаются на карте NavMesh, тогда луч следует от точки источника к цели. Если луч попадает в NavMesh границы, функция возвращает true и данные о посещении заполняются. Если путь от источника к цели свободен, функция возвращает false.
Если отраженный луч заканчивается на внешнем крае, hit.mask является 0; в противном случае она содержит маску области блокирующего многоугольника.
Эта функция может быть использована для проверки того, может ли агент беспрепятственно передвигаться между двумя точками на NavMesh. Например, если у персонажа есть уклоняющийся ход, который требует пространства, вы можете стрелять луч из места расположения персонажа в несколько направлений, чтобы найти место, где персонаж может уклониться.
Raycast отличается от физики лучевой прокат, потому что он работает на “2.5D”, на NavMesh. Разница с физическими лучами заключается в том, NavMesh лучи могут обнаружить все виды навигационных препятствий, таких как отверстия в земле, и он может также подняться на склонах, если район судоходен.
// TargetReachable using UnityEngine; using UnityEngine.AI;
public class TargetReachable : MonoBehaviour { public Transform target; private NavMeshHit hit; private bool blocked = false;
void Update() { blocked = NavMesh.Raycast(transform.position, target.position, out hit, NavMesh.AllAreas); Debug.DrawLine(transform.position, target.position, blocked ? Color.red : Color.green);
if (blocked) Debug.DrawRay(hit.position, Vector3.up, Color.red); } }
Если вы хотите найти ближайшую точку на NavMesh, используйте физику проецирования луча, чтобы найти точку в мире. Дополнительные сведения см. в примере Перемещение агента в положение, выбранное при нажатии мыши.
Declaration
public static bool Raycast(Vector3 sourcePosition, Vector3 targetPosition, out AI.NavMeshHit hit, AI.NavMeshQueryFilter filter);Параметры
| Параметр | Описание |
|---|---|
| sourcePosition | Происхождение луча. |
| targetPosition | Конец луча. |
| хит | Содержит свойства полученного в результате отражения луча местоположения. |
| фильтр | Фильтр, определяющий, какие области NavMesh могут быть пропусчены при отслеживании луча. |
Возвращаемое значение
логическое True, если луч прекращается до достижения целевой позиции. В противном случае возвращает false.
Описание
Проводит линию между двумя позициями на NavMesh, в зависимости от ограничений, определенных аргументом filter.
Линия заканчивается на внешних краях или в непроходимой зоне.