unity的navmesh生成可供threejs使用的模型数据文件

1、在unity中生成导航网格

2、导出网格的顶点和索引数据
这是导出数据的C#文件代码
using System.IO;
using UnityEditor;
using UnityEngine.SceneManagement;
using UnityEngine;
using System.Security.Cryptography;


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

        UnityEngine.AI.NavMeshTriangulation navMeshTriangulation = UnityEngine.AI.NavMesh.CalculateTriangulation();

        //文件路径  
        string path = Application.dataPath + "/AStar/obj/" + SceneManager.GetActiveScene().name + ".obj";

        //新建文件
        StreamWriter streamWriter = new StreamWriter(path);
        
        double[] arr = new double[navMeshTriangulation.vertices.Length];
        //顶点  
        for (int i = 0; i < navMeshTriangulation.vertices.Length; i++)
        {
            streamWriter.WriteLine("v  " + navMeshTriangulation.vertices[i].x * -1 + " " + navMeshTriangulation.vertices[i].y + " " + navMeshTriangulation.vertices[i].z);
        }

        double[] farr = new double[navMeshTriangulation.indices.Length];
        Debug.Log("triangles number--->" + farr.Length);
        //索引  
        for (int i = 0; i < navMeshTriangulation.indices.Length;)
        {
            streamWriter.WriteLine("f " + (navMeshTriangulation.indices[i + 2] + 1) + " " + (navMeshTriangulation.indices[i + 1] + 1) + " " + (navMeshTriangulation.indices[i] + 1));
            i = i + 3;
        }

        streamWriter.Flush();
        streamWriter.Close();
        AssetDatabase.Refresh();
        Debug.Log("NavMesh Export Success");
    }
}

3、安装python(实测2.7可以)
通过 convert_obj_three.py
执行
python convert_obj_three.py -i xx.obj -o xx.json
生成threejs能够使用的数据文件

如果生成失败
从Autodesk公司官网找到FBX的sdk,注意要是python版本
这里用的是 fbx202001_fbxpythonbindings_win

你可能感兴趣的:(mesh,unity)