예제 #1
0
    public bool CreateNavMesh()
    {
        if (_LineGameObj != null)
        {
            GameObject.Destroy(_LineGameObj);
            _LineGameObj = null;
        }

        if (_LineGameObj == null)
        {
            _LineGameObj = new GameObject("LineGameObj");
        }
        for (int i = 0; i < _navMeshGameObjList.Count; ++i)
        {
            GameObject go = _navMeshGameObjList[i];
            if (go != null)
            {
                GameObject.Destroy(go);
            }
        }
        _navMeshGameObjList.Clear();

        LineRenderer lineRenderer = _LineGameObj.AddComponent <LineRenderer>();

        lineRenderer.useWorldSpace = true;
        lineRenderer.startWidth    = 0.05f;
        lineRenderer.endWidth      = 0.05f;
        lineRenderer.enabled       = false;
        CUnityUtil.DisableLightAndShadow(lineRenderer);

        //ground
        {
            LuaInterface.SamplePolyAreas area = LuaInterface.SamplePolyAreas.SAMPLE_POLYAREA_GROUND;

            Vector3[] vertices;
            int[]     triangles;
            //Load NavMesh
            {
                int vCont;
                int iCont;

                NavMeshManager m_navMeshMan = NavMeshManager.Instance;
                m_navMeshMan.GetNavMeshVertexIndexCount(out vCont, out iCont, area);

                vertices  = new Vector3[vCont];
                triangles = new int[iCont];

                m_navMeshMan.FillNavMeshVertexIndexBuffer(vertices, vCont, triangles, iCont, area);
            }

            CUnityUtil.SMeshData meshData = new CUnityUtil.SMeshData();
            meshData.vertices = vertices;
            meshData.indices  = triangles;

            List <CUnityUtil.SMeshData> listMeshData = new List <CUnityUtil.SMeshData>();
            CUnityUtil.SplitMeshData(meshData, listMeshData);

            Color color = new Color(0, 0.75f, 1.0f);
            for (int i = 0; i < listMeshData.Count; ++i)
            {
                GameObject go = new GameObject(HobaText.Format("NavMeshGameObj_{0}_{1}", (int)area, i));

                MeshRenderer meshRenderer = go.AddComponent <MeshRenderer>();
                meshRenderer.enabled         = false;
                meshRenderer.name            = HobaText.Format("MeshRenderer_{0}_{1}", (int)area, i);
                meshRenderer.material.shader = Shader.Find("Legacy Shaders/Bumped Diffuse");
                meshRenderer.material.color  = color;
                CUnityUtil.DisableLightAndShadow(meshRenderer);
                MeshFilter meshFilter = go.AddComponent <MeshFilter>();
                meshFilter.sharedMesh           = new Mesh();
                meshFilter.sharedMesh.name      = HobaText.Format("MeshFilterMesh_{0}_{1}", (int)area, i);
                meshFilter.sharedMesh.vertices  = listMeshData[i].vertices;
                meshFilter.sharedMesh.triangles = listMeshData[i].indices;

                _navMeshGameObjList.Add(go);
            }
        }

        //grass
        {
            LuaInterface.SamplePolyAreas area = LuaInterface.SamplePolyAreas.SAMPLE_POLYAREA_GRASS;

            Vector3[] vertices;
            int[]     triangles;
            //Load NavMesh
            {
                int vCont;
                int iCont;

                NavMeshManager m_navMeshMan = NavMeshManager.Instance;
                m_navMeshMan.GetNavMeshVertexIndexCount(out vCont, out iCont, area);

                vertices  = new Vector3[vCont];
                triangles = new int[iCont];

                m_navMeshMan.FillNavMeshVertexIndexBuffer(vertices, vCont, triangles, iCont, area);
            }

            CUnityUtil.SMeshData meshData = new CUnityUtil.SMeshData();
            meshData.vertices = vertices;
            meshData.indices  = triangles;

            List <CUnityUtil.SMeshData> listMeshData = new List <CUnityUtil.SMeshData>();
            CUnityUtil.SplitMeshData(meshData, listMeshData);

            Color color = new Color(0, 0.75f, 0.25f);
            for (int i = 0; i < listMeshData.Count; ++i)
            {
                GameObject go = new GameObject(HobaText.Format("NavMeshGameObj_{0}_{1}", (int)area, i));

                MeshRenderer meshRenderer = go.AddComponent <MeshRenderer>();
                meshRenderer.enabled         = false;
                meshRenderer.name            = HobaText.Format("MeshRenderer_{0}_{1}", (int)area, i);
                meshRenderer.material.shader = Shader.Find("Legacy Shaders/Bumped Diffuse");
                meshRenderer.material.color  = color;
                CUnityUtil.DisableLightAndShadow(meshRenderer);
                MeshFilter meshFilter = go.AddComponent <MeshFilter>();
                meshFilter.sharedMesh           = new Mesh();
                meshFilter.sharedMesh.name      = HobaText.Format("MeshFilterMesh_{0}_{1}", (int)area, i);
                meshFilter.sharedMesh.vertices  = listMeshData[i].vertices;
                meshFilter.sharedMesh.triangles = listMeshData[i].indices;

                _navMeshGameObjList.Add(go);
            }
        }

        //road
        {
            LuaInterface.SamplePolyAreas area = LuaInterface.SamplePolyAreas.SAMPLE_POLYAREA_ROAD;

            Vector3[] vertices;
            int[]     triangles;
            //Load NavMesh
            {
                int vCont;
                int iCont;

                NavMeshManager m_navMeshMan = NavMeshManager.Instance;
                m_navMeshMan.GetNavMeshVertexIndexCount(out vCont, out iCont, area);

                vertices  = new Vector3[vCont];
                triangles = new int[iCont];

                m_navMeshMan.FillNavMeshVertexIndexBuffer(vertices, vCont, triangles, iCont, area);
            }

            CUnityUtil.SMeshData meshData = new CUnityUtil.SMeshData();
            meshData.vertices = vertices;
            meshData.indices  = triangles;

            List <CUnityUtil.SMeshData> listMeshData = new List <CUnityUtil.SMeshData>();
            CUnityUtil.SplitMeshData(meshData, listMeshData);

            Color color = new Color(0.75f, 0.25f, 0f);
            for (int i = 0; i < listMeshData.Count; ++i)
            {
                GameObject go = new GameObject(HobaText.Format("NavMeshGameObj_{0}_{1}", (int)area, i));

                MeshRenderer meshRenderer = go.AddComponent <MeshRenderer>();
                meshRenderer.enabled         = false;
                meshRenderer.name            = HobaText.Format("MeshRenderer_{0}_{1}", (int)area, i);
                meshRenderer.material.shader = Shader.Find("Legacy Shaders/Bumped Diffuse");
                meshRenderer.material.color  = color;
                CUnityUtil.DisableLightAndShadow(meshRenderer);
                MeshFilter meshFilter = go.AddComponent <MeshFilter>();
                meshFilter.sharedMesh           = new Mesh();
                meshFilter.sharedMesh.name      = HobaText.Format("MeshFilterMesh_{0}_{1}", (int)area, i);
                meshFilter.sharedMesh.vertices  = listMeshData[i].vertices;
                meshFilter.sharedMesh.triangles = listMeshData[i].indices;

                _navMeshGameObjList.Add(go);
            }
        }


        //Default false
/*        showNavMesh(true);*/
        return(true);
    }