美文网首页Unity技术分享
Unity3D 从NavMesh中随机取一个点

Unity3D 从NavMesh中随机取一个点

作者: 重装机霸 | 来源:发表于2017-09-28 11:17 被阅读192次

    最近在做的功能,要求地图上的角色随机移动。最快发方法当然是随机一个角色方向,角色往这个反向移动几秒,然后继续随机反向移动,如此循环。这种方法虽然简单,但是看起来角色非常“傻”。
      我的地图中使用了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中随机取一个点

        本文链接:https://www.haomeiwen.com/subject/tqgfcxtx.html