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);
}
}
}
sourcePosition | 示例查询的原点。 |
hit | 保留所生成位置的属性。 |
maxDistance | 在距离源位置的此段距离内采样。 |
filter | 一种过滤器,指定在查找最近的点时允许的导航网格区域。 |
bool 如果找到最近的点,则为 true。
在为过滤器指定的代理类型构建的任何导航网格上,对最接近源位置的位置进行采样。
仅考虑 NavMeshQueryFilter.areaMask 中定义的区域上的位置。 最大的搜索半径由 maxDistance 设置。在 hit 参数中返回找到的所有位置的信息。