Unity3D 從NavMesh中隨機取一個點

最近在做的功能,要求地圖上的角色隨機移動。最快發(fā)方法當(dāng)然是隨機一個角色方向,角色往這個反向移動幾秒,然后繼續(xù)隨機反向移動,如此循環(huán)。這種方法雖然簡單,但是看起來角色非?!吧怠薄?br> ??我的地圖中使用了NavMesh,那是不是可以從烘焙好的NavMesh中,隨機取一個點,然后設(shè)置NavMeshAgent.SetDestination。這樣會使角色更“鮮活”。
??要在NaveMesh中隨機取點,那就得先取到NaveMesh所有的頂點。Unity中提供了NavMesh.CalculateTriangulation()方法。該方法可以返回NavMesh所有頂點的數(shù)組。而且,數(shù)組中每相鄰的三個頂點,就是NavMesh中三角面的頂點。那么,隨機數(shù)組中的一個頂點,再取其相鄰的兩個頂點,就可以隨機取到一個三角面。
??隨機取三角面解決了,那么在三角形中隨機取一個點就更簡單了。直接上代碼:

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;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容