示例#1
0
    void CreatePloyObj(nav_editor.MyPoly poly, int id)
    {
        GameObject obj = new GameObject();

        obj.name                    = "PolyMesh_" + id.ToString();
        obj.transform.parent        = parent_;
        obj.transform.localPosition = Vector3.zero;
        obj.transform.localScale    = Vector3.one;
        obj.transform.localRotation = Quaternion.Euler(Vector3.zero);

        MeshFilter   mesh_filter = obj.AddComponent <MeshFilter>();
        MeshRenderer mesh_render = obj.AddComponent <MeshRenderer>();

        mesh_render.material = new Material(Shader.Find("unlit/vertex_color"));

        Mesh mesh = new Mesh();

        mesh.name = obj.name;

        mesh_filter.sharedMesh = mesh;

        //转换数据
        Vector3[] vertices = new Vector3[poly.vertex_num];
        int[]     indexes  = new int[poly.index_num];
        Color[]   colors   = new Color[poly.vertex_num];

        for (int i = 0; i < poly.vertex_num; ++i)
        {
            IntPtr p = new IntPtr(poly.vertexs.ToInt64() + (uint)(i * Marshal.SizeOf(typeof(nav_editor.MyVertex))));
            nav_editor.MyVertex v = nav_editor.PtrToStructure <nav_editor.MyVertex>(p);
            vertices[i].x = -v.v[0]; //注意!
            vertices[i].y = v.v[1];
            vertices[i].z = v.v[2];

            colors[i] = GetColor(poly.area);
            //colors[i].a = 0.3f;
        }

        for (int i = 0; i < poly.index_num; ++i)
        {
            IntPtr p = new IntPtr(poly.indexs.ToInt64() + (uint)(i * Marshal.SizeOf(typeof(int))));
            indexes[i] = nav_editor.PtrToStructure <int>(p);
        }

        Transform trans = obj.transform;

        for (int i = 0; i < vertices.Length; ++i)
        {
            vertices[i] = trans.InverseTransformPoint(vertices[i]);
        }
        mesh.vertices  = vertices;
        mesh.triangles = indexes;
        mesh.colors    = colors;
    }
示例#2
0
    public void Refresh(nav_editor.MyNavmeshRenderInfo info)
    {
        Clear();

        for (int i = 0; i < info.poly_num; ++i)
        {
            IntPtr            p    = new IntPtr(info.poly.ToInt64() + (uint)(i * Marshal.SizeOf(typeof(nav_editor.MyPoly))));
            nav_editor.MyPoly ploy = nav_editor.PtrToStructure <nav_editor.MyPoly>(p);

            CreatePloyObj(ploy, i);
        }
    }
示例#3
0
    void DataUninit()
    {
        for (int i = 0; i < navmesh_render_info_.poly_num; ++i)
        {
            IntPtr            p    = new IntPtr(navmesh_render_info_.poly.ToInt64() + (uint)(i * Marshal.SizeOf(typeof(nav_editor.MyPoly))));
            nav_editor.MyPoly ploy = nav_editor.PtrToStructure <nav_editor.MyPoly>(p);

            if (ploy.vertexs != IntPtr.Zero)
            {
                Marshal.FreeHGlobal(ploy.vertexs);
            }
            if (ploy.indexs != IntPtr.Zero)
            {
                Marshal.FreeHGlobal(ploy.indexs);
            }
        }
        if (navmesh_render_info_.poly != IntPtr.Zero)
        {
            Marshal.FreeHGlobal(navmesh_render_info_.poly);
        }
        navmesh_render_info_.poly_num = 0;
    }