NavMesh.SamplePosition
Declaration
public static bool SamplePosition(Vector3 sourcePosition, out AI.NavMeshHit hit, float maxDistance, int areaMask);Параметры
| Параметр | Описание |
|---|---|
| sourcePosition | Происхождение примерного запроса. |
| хит | Содержит свойства полученного местоположения. Значение hit.normal никогда не вычисляется. Оно всегда (0,0,0). |
| maxDistance | Образец на этом расстоянии от sourcePosition. |
| areaMask | Маска, указывающая области NavMesh, разрешенные при поиске ближайшей точки. |
Возвращаемое значение
логическое True, если найдена ближайшая точка.
Описание
Находит ближайшую точку, основанную на NavMesh в пределах указанного диапазона.
Ближайшая точка обнаруживается путем проекции вводной точки на близлежащие экземпляры NavMesh вдоль вертикальной оси. Эта вертикальная ось была выбрана для каждого экземпляра в момент creation. Если на этом шаге не обнаружена проекционная точка в пределах указанного расстояния, то выборка распространяется на окружающие позиции NavMesh.
Находит ближайшую точку на основе расстояния до точки запроса. Эта функция не учитывает препятствия. Например, в двухэтажном здании, если sourcePosition установлен на точку на потолке первого этажа, ближайшая точка может быть найдена на втором этаже, а не на первом. Потолок не рассматривается как препятствие.
Эта функция может уменьшить частоту кадров, если указан большой радиус поиска. Чтобы избежать проблем с частотой кадров, рекомендуется указать maxDistance, в два раза превышающий высоту агента.
Если вы пытаетесь найти случайную точку на NavMesh, вам следует использовать рекомендованный радиус и выполнять поиск несколько раз вместо использования очень большого радиуса.
// RandomPointOnNavMesh using UnityEngine; using UnityEngine.AI;
public class RandomPointOnNavMesh : MonoBehaviour { public float range = 10.0f;
bool RandomPoint(Vector3 center, float range, out Vector3 result) { for (int i = 0; i < 30; i++) { Vector3 randomPoint = center + Random.insideUnitSphere * range; NavMeshHit hit; if (NavMesh.SamplePosition(randomPoint, out hit, 1.0f, NavMesh.AllAreas)) { result = hit.position; return true; } } result = Vector3.zero; return false; }
void Update() { Vector3 point; if (RandomPoint(transform.position, range, out point)) { Debug.DrawRay(point, Vector3.up, Color.blue, 1.0f); } } }
Declaration
public static bool SamplePosition(Vector3 sourcePosition, out AI.NavMeshHit hit, float maxDistance, AI.NavMeshQueryFilter filter);Параметры
| Параметр | Описание |
|---|---|
| sourcePosition | Происхождение примерного запроса. |
| хит | Содержит свойства полученного местоположения. Значение hit.normal никогда не вычисляется. Оно всегда (0,0,0). |
| maxDistance | Образец на этом расстоянии от sourcePosition. |
| фильтр | Фильтр, определяющий, какие области NavMesh разрешены при поиске ближайшей точки. |
Возвращаемое значение
логическое True, если найдена ближайшая точка.
Описание
Выбирает позицию, ближайшую к sourcePosition в любом NavMesh, созданном для типа агента, указанного фильтром.
Рассматриваются только позиции на участках, определенных в NavMeshQueryFilter.areaMask. Максимальный радиус поиска устанавливается maxDistance. Информация о любой найденной позиции возвращается в аргументе hit.