Version: 2020.1

NavMesh.SamplePosition

切换到手册
public static bool SamplePosition (Vector3 sourcePosition, out AI.NavMeshHit hit, float maxDistance, int areaMask);

参数

sourcePosition 示例查询的原点。
hit 保留所生成位置的属性。
maxDistance 在距离源位置的此段距离内采样。
areaMask 遮罩,指定在查找最近的点时允许的导航网格区域。

返回

bool 如果找到最近的点,则为 true。

描述

在指定范围内找到导航网格上最近的点。

此函数对导航网格进行采样,以找到导航网格上最近的点。

基于到查询点的距离返回最近的点。此函数不检查环境中的障碍物。例如,如果源位置在天花板上,此函数将返回二楼的点(如果此处有导航网格)而不是一楼的地板位置。

如果搜索半径非常大,该函数的成本可能会非常高。要获得一个良好的起点,其最大距离应是代理高度的 2 倍。

如果您正在尝试查找导航网格上的随机点,最好使用建议的半径并多次尝试,而不是使用非常大的半径。

// 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 保留所生成位置的属性。
maxDistance 在距离源位置的此段距离内采样。
filter 一种过滤器,指定在查找最近的点时允许的导航网格区域。

返回

bool 如果找到最近的点,则为 true。

描述

在为过滤器指定的代理类型构建的任何导航网格上,对最接近源位置的位置进行采样。

仅考虑 NavMeshQueryFilter.areaMask 中定义的区域上的位置。 最大的搜索半径由 maxDistance 设置。在 hit 参数中返回找到的所有位置的信息。