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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容