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

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.