public AsyncOperation ResetNavMesh(AI_TYPE InType) { NavMeshDataInstance dataInstance; if (Map_MeshInstance.TryGetValue(InType, out dataInstance)) { NavMesh.RemoveNavMeshData(dataInstance); Map_MeshInstance.Remove(InType); } NavMeshData meshData = new NavMeshData(); dataInstance = NavMesh.AddNavMeshData(meshData); Map_MeshInstance.Add(InType, dataInstance); int agentIndex = (int)InType; List <NavMeshBuildSource> sources = new List <NavMeshBuildSource>(); NavMeshSourceTag.Collect(ref sources, GetArea(agentIndex), InType); NavMeshBuildSettings defaultBuildSettings = NavMesh.GetSettingsByIndex(agentIndex); //print(agentIndex + "," + defaultBuildSettings.agentRadius); var bounds = QuantizedBounds(); return(NavMeshBuilder.UpdateNavMeshDataAsync(meshData, defaultBuildSettings, sources, bounds)); }
void UpdateNavMesh(bool asyncUpdate = false) { NavMeshSourceTag.CollectMeshes(ref m_Sources); NavMeshSourceTag.CollectModifierVolumes(LayerMask.GetMask("Default"), ref m_Sources); var defaultBuildSettings = NavMesh.GetSettingsByID(AgentID); var bounds = QuantizedBounds(); if (asyncUpdate) { m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } else { NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } /* * NavMeshSourceTag.Collect(ref m_Sources); * var defaultBuildSettings = NavMesh.GetSettingsByID(0); * var bounds = QuantizedBounds(); * * if (asyncUpdate) * m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds); * else * NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds); */ }
void UpdateNavMesh() { if (navMeshIsUpdating) { if (navMeshUpdateOperation.isDone) { if (navMeshInstance.valid) { NavMesh.RemoveNavMeshData(navMeshInstance); } navMeshInstance = NavMesh.AddNavMeshData(navMeshData); navMeshIsUpdating = false; } } else if (navMeshHasNewData) { try { navMeshUpdateOperation = NavMeshBuilder.UpdateNavMeshDataAsync(navMeshData, navMeshBuildSettings, navMeshSources, worldBounds); navMeshIsUpdating = true; } catch (Exception ex) { Debug.Log(ex.ToString()); } navMeshHasNewData = false; } }
void UpdateNavMesh(bool asyncUpdate = false) { //Don't do anything if the target area hasn't changed if (asyncUpdate && center == (m_Tracked ? m_Tracked.position : transform.position)) { return; } NavMeshSourceTag.Collect(ref m_Sources); var defaultBuildSettings = NavMesh.GetSettingsByIndex(0); defaultBuildSettings.overrideVoxelSize = true; defaultBuildSettings.voxelSize = 0.4f; defaultBuildSettings.overrideTileSize = true; defaultBuildSettings.tileSize = 16; var bounds = QuantizedBounds(); if (asyncUpdate) { m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } else { NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } }
void UpdateNavMesh(bool asyncUpdate = false) { var defaultBuildSettings = NavMesh.GetSettingsByID(0); var bounds = QuantizedBounds(); NavMeshBuilder.CollectSources(bounds, navMeshLayers, NavMeshCollectGeometry.RenderMeshes, 0, new List <NavMeshBuildMarkup>(), m_Sources); for (int i = 0; i < m_Sources.Count; i++) { if (m_Sources[i].component.transform.gameObject.layer == 19) { NavMeshBuildSource m = new NavMeshBuildSource(); m = m_Sources[i]; m.area = 3; m_Sources[i] = m; } } if (asyncUpdate) { m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } else { NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } }
private void BuildNavMesh(bool Async) { Bounds navMeshBounds = new Bounds(Player.transform.position, NavMeshSize); List <NavMeshBuildMarkup> markups = new List <NavMeshBuildMarkup>(); List <NavMeshModifier> modifiers; for (int index = 0; index < Surfaces.Length; index++) { if (Surfaces[index].collectObjects == CollectObjects.Children) { modifiers = new List <NavMeshModifier>(GetComponentsInChildren <NavMeshModifier>()); } else { modifiers = NavMeshModifier.activeModifiers; } for (int i = 0; i < modifiers.Count; i++) { if (((Surfaces[index].layerMask & (1 << modifiers[i].gameObject.layer)) == 1) && modifiers[i].AffectsAgentType(Surfaces[index].agentTypeID)) { markups.Add(new NavMeshBuildMarkup() { root = modifiers[i].transform, overrideArea = modifiers[i].overrideArea, area = modifiers[i].area, ignoreFromBuild = modifiers[i].ignoreFromBuild }); } } if (Surfaces[index].collectObjects == CollectObjects.Children) { NavMeshBuilder.CollectSources(transform, Surfaces[index].layerMask, Surfaces[index].useGeometry, Surfaces[index].defaultArea, markups, Sources); } else { NavMeshBuilder.CollectSources(navMeshBounds, Surfaces[index].layerMask, Surfaces[index].useGeometry, Surfaces[index].defaultArea, markups, Sources); } Sources.RemoveAll(RemoveNavMeshAgentPredicate); if (Async) { AsyncOperation navMeshUpdateOperation = NavMeshBuilder.UpdateNavMeshDataAsync(NavMeshDatas[index], Surfaces[index].GetBuildSettings(), Sources, navMeshBounds); navMeshUpdateOperation.completed += HandleNavMeshUpdate; } else { NavMeshBuilder.UpdateNavMeshData(NavMeshDatas[index], Surfaces[index].GetBuildSettings(), Sources, navMeshBounds); OnNavMeshUpdate?.Invoke(navMeshBounds); } } }
public AsyncOperation UpdateNavMesh(NavMeshData data) { List <NavMeshBuildSource> sources = this.CollectSources(); Bounds localBounds = new Bounds(this.m_Center, NavMeshSurface.Abs(this.m_Size)); if (this.m_CollectObjects == CollectObjects.All || this.m_CollectObjects == CollectObjects.Children) { localBounds = this.CalculateWorldBounds(sources); } return(NavMeshBuilder.UpdateNavMeshDataAsync(data, this.GetBuildSettings(), sources, localBounds)); }
public static AsyncOperation UpdateNavMeshDataAsync(NavMeshData data, NavMeshBuildSettings buildSettings, List <NavMeshBuildSource> sources, Bounds localBounds) { if (data == null) { throw new ArgumentNullException("data"); } if (sources == null) { throw new ArgumentNullException("sources"); } return(NavMeshBuilder.UpdateNavMeshDataAsync(data, buildSettings, sources, localBounds, default(NavMeshBuildDebugSettings))); }
private void BuildNavMesh(bool Async) { Bounds navMeshBounds = new Bounds(Player.transform.position, NavMeshSize); List <NavMeshBuildMarkup> markups = new List <NavMeshBuildMarkup>(); List <NavMeshModifier> modifiers; if (Surface.collectObjects == CollectObjects.Children) { modifiers = new List <NavMeshModifier>(GetComponentsInChildren <NavMeshModifier>()); } else { modifiers = NavMeshModifier.activeModifiers; } for (int i = 0; i < modifiers.Count; i++) { if (((Surface.layerMask & (1 << modifiers[i].gameObject.layer)) == 1) && modifiers[i].AffectsAgentType(Surface.agentTypeID)) { markups.Add(new NavMeshBuildMarkup() { root = modifiers[i].transform, overrideArea = modifiers[i].overrideArea, area = modifiers[i].area, ignoreFromBuild = modifiers[i].ignoreFromBuild }); } } if (Surface.collectObjects == CollectObjects.Children) { NavMeshBuilder.CollectSources(transform, Surface.layerMask, Surface.useGeometry, Surface.defaultArea, markups, Sources); } else { NavMeshBuilder.CollectSources(navMeshBounds, Surface.layerMask, Surface.useGeometry, Surface.defaultArea, markups, Sources); } Sources.RemoveAll(source => source.component != null && source.component.gameObject.GetComponent <NavMeshAgent>() != null); if (Async) { NavMeshBuilder.UpdateNavMeshDataAsync(NavMeshData, Surface.GetBuildSettings(), Sources, new Bounds(Player.transform.position, NavMeshSize)); } else { NavMeshBuilder.UpdateNavMeshData(NavMeshData, Surface.GetBuildSettings(), Sources, new Bounds(Player.transform.position, NavMeshSize)); } }
public AsyncOperation UpdateNavMesh(NavMeshData data) { var sources = CollectSources(); // Use unscaled bounds - this differs in behaviour from e.g. collider components. // But is similar to reflection probe - and since navmesh data has no scaling support - it is the right choice here. var sourcesBounds = new Bounds(m_Center, Abs(m_Size)); if (m_CollectObjects == CollectObjects.All || m_CollectObjects == CollectObjects.Children) { sourcesBounds = CalculateWorldBounds(sources); } return(NavMeshBuilder.UpdateNavMeshDataAsync(data, GetBuildSettings(), sources, sourcesBounds)); }
void UpdateNavMesh(bool asyncUpdate = false) { NavMeshSourceTag1.Collect(ref m_Sources); var defaultBuildSettings = NavMesh.GetSettingsByID(0); var bounds = QuantizedBounds(); if (asyncUpdate) { m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } else { NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } }
void UpdateNavMesh(bool asyncUpdate = false) { NavMeshSourceTagImproved.Collect(ref m_Sources, agentTypeID); var buildSettings = NavMesh.GetSettingsByID(agentTypeID); var bounds = QuantizedBounds(); if (asyncUpdate) { m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, buildSettings, m_Sources, bounds); } else { NavMeshBuilder.UpdateNavMeshData(m_NavMesh, buildSettings, m_Sources, bounds); } }
void UpdateNavMesh(bool asyncUpdate = false) { NavMeshSourceTag.Collect(ref m_Sources); //←NavMeshSourceTagタグをセットしたオブジェクトをすべて集めてListに格納 var defaultBuildSettings = NavMesh.GetSettingsByID(0); var bounds = QuantizedBounds(); //←メッシュ生成の範囲をセット if (asyncUpdate) { m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds); //←実際のメッシュ生成を行っている部分。 } else { NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } }
void UpdateNavMesh(bool asyncUpdate = false) { CollectMeshSources(); //NavMeshSourceTag.Collect(ref m_Sources); var defaultBuildSettings = NavMesh.GetSettingsByID(0); if (asyncUpdate) { /*m_Operation = */ NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, meshSources, dungeonBounds); } else { NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, meshSources, dungeonBounds); } }
private void UpdateNavMesh(bool isAsync = false) { NavMeshSourceTag.Collect(ref sources); NavMeshBuildSettings settings; settings = NavMesh.GetSettingsByID(0); Bounds bounds = QuantizeBounds(); if (isAsync) { operation = NavMeshBuilder.UpdateNavMeshDataAsync(navMesh, settings, sources, bounds); } else { NavMeshBuilder.UpdateNavMeshData(navMesh, settings, sources, bounds); } }
void Build(bool asyncUpdate) { Bounds bounds = QuantizedBounds(); //Use agent settings NavMeshBuildSettings agentBuildSettings = NavMesh.GetSettingsByID(AgentID); agentBuildSettings.minRegionArea = MinRegionArea; //Bake updated nav mesh if (asyncUpdate) { Operation = NavMeshBuilder.UpdateNavMeshDataAsync(TheNavMeshData, agentBuildSettings, NavMeshRegionTag.Terrains, bounds); } else { NavMeshBuilder.UpdateNavMeshData(TheNavMeshData, agentBuildSettings, NavMeshRegionTag.Terrains, bounds); } }
void UpdateNavMesh() { if (navMeshIsUpdating) { if (navMeshUpdateOperation.isDone) { if (navMeshInstance.valid) { NavMesh.RemoveNavMeshData(navMeshInstance); } navMeshInstance = NavMesh.AddNavMeshData(navMeshData); navMeshIsUpdating = false; } } else if (navMeshHasNewData) { navMeshUpdateOperation = NavMeshBuilder.UpdateNavMeshDataAsync(navMeshData, navMeshBuildSettings, navMeshSources, worldBounds); navMeshIsUpdating = true; navMeshHasNewData = false; } }
void UpdateNavMesh(bool asyncUpdate = false) { m_Sources.Clear(); BoxCollider[] bcs = GetComponentsInChildren <BoxCollider>(); Matrix4x4 worldToLocal = transform.worldToLocalMatrix; foreach (BoxCollider b in bcs) { var s = new NavMeshBuildSource(); s.shape = NavMeshBuildSourceShape.Box; s.transform = b.transform.localToWorldMatrix; s.size = b.size; s.area = areaId; var m = b.transform.localToWorldMatrix; m_Sources.Add(s); } var defaultBuildSettings = NavMesh.GetSettingsByID(0); defaultBuildSettings.agentRadius = 0.08f; defaultBuildSettings.minRegionArea = 0.5f; bounds = CalculateWorldBounds(m_Sources); if (asyncUpdate) { m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } else { NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } }
void UpdateNavMesh(bool asyncUpdate = false) { NavMeshSourceTag.Collect(ref m_Sources); var defaultBuildSettings = NavMesh.GetSettingsByID(0); defaultBuildSettings.agentClimb = 0.5f; defaultBuildSettings.minRegionArea = 50000.0f; defaultBuildSettings.agentSlope = 30; defaultBuildSettings.agentRadius = 0.5f; defaultBuildSettings.voxelSize = 0.75f; var bounds = QuantizedBounds(); if (asyncUpdate) { m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } else { //m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds); NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } }
void UpdateNavMesh(bool asyncUpdate = false) { NavMeshSourceTag.Collect(ref m_Sources); var defaultBuildSettings = NavMesh.GetSettingsByID(0); defaultBuildSettings.voxelSize = voxelSize; defaultBuildSettings.tileSize = tileSize; defaultBuildSettings.agentClimb = agentClimb; defaultBuildSettings.agentRadius = agentRadius; defaultBuildSettings.agentHeight = agentHeight; var bounds = QuantizedBounds(); if (asyncUpdate) { m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } else { NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds); } }