Unity3D 从NavMesh中随机取一个点

最近在做的功能,要求地图上的角色随机移动。最快发方法当然是随机一个角色方向,角色往这个反向移动几秒,然后继续随机反向移动,如此循环。这种方法虽然简单,但是看起来角色非常“傻”。
  我的地图中使用了NavMesh,那是不是可以从烘焙好的NavMesh中,随机取一个点,然后设置NavMeshAgent.SetDestination。这样会使角色更“鲜活”。
  要在NaveMesh中随机取点,那就得先取到NaveMesh所有的顶点。Unity中提供了NavMesh.CalculateTriangulation()方法。该方法可以返回NavMesh所有顶点的数组。而且,数组中每相邻的三个顶点,就是NavMesh中三角面的顶点。那么,随机数组中的一个顶点,再取其相邻的两个顶点,就可以随机取到一个三角面。
  随机取三角面解决了,那么在三角形中随机取一个点就更简单了。直接上代码:

public Vector3 GetRandomLocation()
{
     NavMeshTriangulation navMeshData = NavMesh.CalculateTriangulation();

     int t = Random.Range(0, navMeshData.indices.Length - 3);

     Vector3 point = Vector3.Lerp(navMeshData.vertices[navMeshData.indices[t]], navMeshData.vertices[navMeshData.indices[t + 1]], Random.value);
     point = Vector3.Lerp(point, navMeshData.vertices[navMeshData.indices[t + 2]], Random.value);

     return point;
}

你可能感兴趣的:(Unity3D 从NavMesh中随机取一个点)