예제 #1
0
    //吧碰撞归类,放到对应文件夹
    static void CopyColToTemp(string findGo)
    {
        GameObject go = GameObject.Find(findGo) as GameObject;

        if (go == null)
        {
            return;
        }
        //每一个Collider都必须要有Renderer,并且把碰撞复制到toParentTemp
        Collider[] cols = go.transform.GetComponentsInChildren <Collider>();
        foreach (Collider col in cols)
        {
            bool isCanWalk = (ComLayer.IsGroundLayer(col.gameObject.layer));
            //不区分可走不可走,全部障碍都可以走
            isCanWalk = true;
            //要吧renderer打开才能烘焙寻路
            if (col is TerrainCollider)
            {
                Terrain mesh = col.GetComponent <Terrain>();
                if (mesh == null)
                {
                    Debuger.LogError(col.name + " 找不到Terrain");
                    continue;
                }
                mesh.enabled = true;
                Debuger.LogError("碰撞含有Terrain组件,导出的obj后端无法使用");
            }
            else
            {
                Renderer mesh = col.GetComponent <Renderer>();
                if (mesh == null)
                {
                    Debuger.LogError(col.name + " 找不到Renderer");
                    continue;
                }
                mesh.enabled = true;
            }

            col.transform.parent = GetParent(isCanWalk).transform;
            GameObjectUtility.SetStaticEditorFlags(col.gameObject, StaticEditorFlags.NavigationStatic);
            //设置能否行走
            GameObjectUtility.SetNavMeshArea(col.gameObject, isCanWalk ? 0 : 1);
        }
    }
예제 #2
0
    static void BeginBuild()
    {
        GameObject go = GameObject.Find("MapScene") as GameObject;

        if (go == null)
        {
            return;
        }

        //如果renderer没有collider的,不要烘焙
        foreach (Renderer r in go.transform.GetComponentsInChildren <Renderer>())
        {
            Collider c = r.gameObject.GetComponent <Collider>();
            {
                if (c == null)
                {
                    GameObjectUtility.SetStaticEditorFlags(r.gameObject, GameObjectUtility.GetStaticEditorFlags(r.gameObject) & ~StaticEditorFlags.NavigationStatic);
                }
            }
        }

        //每一个Collider都必须要有Renderer
        Collider[] cols = go.transform.GetComponentsInChildren <Collider>();
        //记录改变的render
        List <Renderer> colRenderListRecord = new List <Renderer>();

        foreach (Collider col in cols)
        {
            bool isCanWalk = (ComLayer.IsGroundLayer(col.gameObject.layer));
            //不区分可走不可走,全部障碍都可以走
            isCanWalk = true;
            //要吧renderer打开才能烘焙寻路
            if (col is TerrainCollider)
            {
                Terrain mesh = col.GetComponent <Terrain>();
                if (mesh == null)
                {
                    Debuger.LogError(col.name + " 找不到Terrain");
                    continue;
                }
                Debuger.LogError("碰撞含有Terrain组件,导出的obj后端无法使用");
            }
            else
            {
                Renderer mesh = col.GetComponent <Renderer>();
                if (mesh == null)
                {
                    Debuger.LogError(col.name + " 找不到Renderer");
                    continue;
                }
                if (mesh.enabled == false)
                {
                    colRenderListRecord.Add(mesh);
                }
                mesh.enabled = true;
            }
            GameObjectUtility.SetStaticEditorFlags(col.gameObject, StaticEditorFlags.NavigationStatic);
        }

        //设置stepheight
        SerializedObject   settingsObject = new SerializedObject(NavMeshBuilder.navMeshSettingsObject);
        SerializedProperty agentRadius    = settingsObject.FindProperty("m_BuildSettings.agentClimb");

        agentRadius.floatValue = 0.5f;
        settingsObject.ApplyModifiedProperties();

        NavMeshBuilder.BuildNavMesh();

        //吧render不激活
        foreach (Renderer r in colRenderListRecord)
        {
            r.enabled = false;
        }
    }