Объявление
public static bool SamplePosition(Vector3 sourcePosition, out AI.NavMeshHit hit, float maxDistance, int areaMask);Параметры
sourcePosition | Происхождение примера запроса. |
hit | Содержит свойства полученного местоположения. Значение hit.normal никогда не вычисляется. Всегда (0,0,0). |
maxDistance | Образец в пределах этого расстояния от sourcePosition. |
areaMask | Маска, определяющая разрешенные области NavMesh при поиске ближайшей точки. |
Возвращает
bool true, если ближайшая точка найдена.
Описание
Находит ближайшую точку на основе NavMesh в указанном диапазоне.
Ближайшая точка находится путем проецирования входной точки на соседние экземпляры NavMesh вдоль вертикальной оси. Эта вертикальная ось выбирается для каждого экземпляра во время создания. Если на этом шаге не удается найти спроецированную точку на указанном расстоянии, выборка распространяется на окружающие позиции 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);
}
}
}
Объявление
public static bool SamplePosition(Vector3 sourcePosition, out AI.NavMeshHit hit, float maxDistance, AI.NavMeshQueryFilter filter);Параметры
sourcePosition | Происхождение примера запроса. |
hit | Содержит свойства полученного местоположения. Значение hit.normal никогда не вычисляется. Всегда (0,0,0). |
maxDistance | Образец на этом расстоянии от sourcePosition. |
filter | Фильтр, указывающий, какие области NavMesh разрешены при поиске ближайшей точки.. |
Возвращает
bool true, если ближайшая точка найдена.
Описание
Выборка позиции, ближайшей к sourcePosition, в любой NavMesh, созданной для типа агента, указанного фильтром.
Учитывать только позиции в областях, определенных в NavMeshQueryFilter.areaMask. Максимальный радиус поиска задается параметром maxDistance. Информация о любой найденной позиции возвращается в аргументе попадания.