//吧碰撞归类,放到对应文件夹 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); } }
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; } }