unity A*寻路 (一)导出NavMesh数据

使用unity的API   NavMesh.CalculateTriangulation 可以获取NavMesh数据

 

首先 我们创建一个新的工程 保存一个test场景

 

然后在场景中添加一个Plane作为地面可以寻路,添加几个cube作为障碍物,添加一个灯光  如图

点击左上角Window->Navigation     打开Navigation窗口

选中plane对象设置参数 如图

同样的操作选中cube设置参数 不过Navigation Area参数为Not Walkable

 

最后点击右下角Back按钮

烘焙成功 在Naviagtion窗口激活状态下 Scene视图如下

 

寻路准备工作已经完成  

现在我们需要获取到NavMesh数据

 

在工程中添加代码

 

代码如下:

复制代码
using System.IO;
using UnityEditor;
using UnityEngine.SceneManagement;
using UnityEngine;


//navmesh导出数据
public class NavMeshExport : MonoBehaviour
{
    [MenuItem("NavMesh/Export")]
    static void Export()
    {
        Debug.Log("NavMesh Export Start");

        NavMeshTriangulation navMeshTriangulation = NavMesh.CalculateTriangulation();

        //文件路径 路径文件夹不存在会报错 
        string path = Application.dataPath + "/AStar/obj/" + SceneManager.GetActiveScene().name + ".obj";

        //新建文件
        StreamWriter streamWriter = new StreamWriter(path);

        //顶点  
        for (int i = 0; i < navMeshTriangulation.vertices.Length; i++)
        {
            streamWriter.WriteLine("v  " + navMeshTriangulation.vertices[i].x + " " + navMeshTriangulation.vertices[i].y + " " + navMeshTriangulation.vertices[i].z);
        }

        streamWriter.WriteLine("g pPlane1");

        //索引  
        for (int i = 0; i < navMeshTriangulation.indices.Length;)
        {
            streamWriter.WriteLine("f " + (navMeshTriangulation.indices[i] + 1) + " " + (navMeshTriangulation.indices[i + 1] + 1) + " " + (navMeshTriangulation.indices[i + 2] + 1));
            i = i + 3;
        }

        streamWriter.Flush();
        streamWriter.Close();

        
        AssetDatabase.Refresh();

        Debug.Log("NavMesh Export Success");
    }
}
复制代码

点击NavMesh-> Export 按钮 导出NavMesh数据 保存在obj文件夹

 

 

注意:

1.如果obj文件夹不存在 会报错

2.obj文件导入unity时会自动生成一个Materials文件里面有一个材质球 可以自己删除

 

 

 

 链接: https://pan.baidu.com/s/1u4m4HYTGuoLwTg7U66a_Cg 密码: u81j

posted @   邹强  阅读(4584)  评论(1编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示