• 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

  • 相关阅读:
    模板合集
    1201: 众数问题
    112. 路径总和
    Hibernate的配置及CURD
    5. 最长回文子串
    1120: 最值交换
    1119: 一维数组排序
    1118: 数列有序
    1117: 查找数组元素
    1116: 删除元素
  • 原文地址:https://www.cnblogs.com/zouqiang/p/8562543.html
Copyright © 2020-2023  润新知