美文网首页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中随机取一个点

    最近在做的功能,要求地图上的角色随机移动。最快发方法当然是随机一个角色方向,角色往这个反向移动几秒,然后继续随机反...

  • random

    random 取随机数 取一个随机浮点数。 在1-3取一个随机数数(整型)。 在序列中随机取一个元素。 在序列中随...

  • PHP 练习手册

    1、从数组中随机取几个 array_rand()array_rand() 函数可以从数组中随机获取一个或多个元素,...

  • Python之random模块

    import random #取随机数的模块 取随机小数 取随机整数 从一个列表中随机抽取值 打乱一个列表的顺序 ...

  • js随机从数组中取出几个元素

    1.从数组items中随机取出一个元素 2.从前面的一篇随机数组中随机取几个元素

  • Java List 随机取记录

    在这对Java List中怎么随机取数做一个分享: 其实List中没有现成随机取记录的方法,但在Collectio...

  • 快速排序

    经典快排:取数组中最后一个位置的数,小于等于这个数的放左区域,大于这个数的放右区域。改进的随机快排:随机从数组中取...

  • golang学习笔记之-取随机数

    取随机数 取从什么开始到什么结束:

  • python 随机取 list 中的元素

    随机取 list 中的元素 random.sample

  • js取整和取随机数

    取整: 取随机数 取任意两个数之间的随机数

网友评论

    本文标题:Unity3D 从NavMesh中随机取一个点

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