public NavMeshModel(Vector3[] aNavMeshVertice, int[] aNavMeshIndice) { NavMeshTools.MergeVertex(aNavMeshVertice, aNavMeshIndice, out navMeshVertice, out navMeshIndice); InitNodes(); InitNeighbors(); RefreshMesh(); }
public void ExportNavMesh() { NavMeshTriangulation navMeshTriangulation = NavMesh.CalculateTriangulation(); Vector3[] vertices = null; int[] indices = null; NavMeshTools.MergeVertex(navMeshTriangulation.vertices, navMeshTriangulation.indices, out vertices, out indices); string objContent = NavMeshTools.SerializeToObj(vertices, indices); string objPath = Path.Combine(Application.dataPath, "navmesh.obj"); File.WriteAllText(objPath, objContent); }
public IEnumerator UpdateNavMeshAndWait() { if (HasBuildOperationStarted || AiManager.nav_disable || !AI.npc_enable) { yield break; } HasBuildOperationStarted = false; Bounds.center = base.transform.position; if (!overrideAutoBounds) { Bounds.size = new Vector3(CellSize * CellCount, Height, CellSize * CellCount); } IEnumerator enumerator = NavMeshTools.CollectSourcesAsync(Bounds, LayerMask, NavMeshCollectGeometry, defaultArea, use_baked_terrain_mesh, CellSize, sources, AppendModifierVolumes, UpdateNavMeshAsync); if (AiManager.nav_wait) { yield return(enumerator); } else { StartCoroutine(enumerator); } if (!AiManager.nav_wait) { UnityEngine.Debug.Log("nav_wait is false, so we're not waiting for the navmesh to finish generating. This might cause your server to sputter while it's generating."); yield break; } int lastPct = 0; while (!HasBuildOperationStarted) { Thread.Sleep(250); yield return(null); } while (BuildingOperation != null) { int num = (int)(BuildingOperation.progress * 100f); if (lastPct != num) { UnityEngine.Debug.LogFormat("{0}%", num); lastPct = num; } Thread.Sleep(250); FinishBuildingNavmesh(); yield return(null); } }
public IEnumerator UpdateNavMeshAndWait() { if (HasBuildOperationStarted || AiManager.nav_disable) { yield break; } HasBuildOperationStarted = false; Bounds.size = TerrainMeta.Size; NavMesh.pathfindingIterationsPerFrame = AiManager.pathfindingIterationsPerFrame; IEnumerator enumerator = NavMeshTools.CollectSourcesAsync(Bounds, LayerMask, NavMeshCollectGeometry, defaultArea, use_baked_terrain_mesh, AsyncTerrainNavMeshBakeCellSize, sources, AppendModifierVolumes, UpdateNavMeshAsync); if (AiManager.nav_wait) { yield return(enumerator); } else { StartCoroutine(enumerator); } if (!AiManager.nav_wait) { UnityEngine.Debug.Log("nav_wait is false, so we're not waiting for the navmesh to finish generating. This might cause your server to sputter while it's generating."); yield break; } int lastPct = 0; while (!HasBuildOperationStarted) { Thread.Sleep(250); yield return(null); } while (BuildingOperation != null) { int num = (int)(BuildingOperation.progress * 100f); if (lastPct != num) { UnityEngine.Debug.LogFormat("{0}%", num); lastPct = num; } Thread.Sleep(250); FinishBuildingNavmesh(); yield return(null); } }