Объявление
public static bool Raycast(Vector3 sourcePosition, Vector3 targetPosition, out AI.NavMeshHit hit, int areaMask);Параметры
sourcePosition | Происхождение луча. |
targetPosition | Конец луча. |
hit | Содержит свойства результирующего местоположения луча. |
areaMask | Маска битового поля, указывающая, какие области NavMesh могут передаваться при трассировке луча. |
Возвращает
bool true, если луч завершается до достижения целевой позиции. В противном случае возвращает false.
Описание
Проведите линию между двумя точками на NavMesh.
Исходная и конечная точки сначала отображаются в NavMesh, затем от исходной точки к цели прослеживается луч. Если луч достигает границы NavMesh, функция возвращает значение true, и данные попадания заполняются. Если путь от источника к цели свободен, функция возвращает false.
Если raycast заканчивается на внешнем крае, hit.mask
равен 0; в противном случае он содержит маску области блокирующего полигона.
Эту функцию можно использовать для проверки того, может ли агент беспрепятственно пройти между двумя точками в NavMesh. Например, если у вашего персонажа есть маневр уклонения, для которого требуется пространство, вы можете выстрелить лучом из местоположения персонажа в нескольких направлениях, чтобы найти место, до которого персонаж может увернуться.
NavMesh.Raycast отличается от физического raycast, поскольку он работает на «2.5D», на NavMesh. Отличие от физического raycast заключается в том, что версия 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, вам следует использовать физический raycast, чтобы найти точку в мире, см. Переместить в точку щелчка пример.
Объявление
public static bool Raycast(Vector3 sourcePosition, Vector3 targetPosition, out AI.NavMeshHit hit, AI.NavMeshQueryFilter filter);Параметры
sourcePosition | Происхождение луча. |
targetPosition | Конец луча. |
hit | Содержит свойства результирующего местоположения луча. |
filter | Фильтр, указывающий, какие области NavMesh могут передаваться при трассировке луча. |
Возвращает
bool true, если луч завершается до достижения целевой позиции. В противном случае возвращает false.
Описание
Отслеживает линию между двумя позициями в NavMesh с учетом ограничений, заданных аргументом фильтра.
Линия обрывается на внешних краях или в непроходимой области.