private async System.Threading.Tasks.Task BuildNavMesh(bool force = false) { if (force == false) { if (VP1.IsMouseDown) { return; } } if (RCTileMeshBuilder.InputGeom == null) { return; } EngineNS.CEngine.Instance.EventPoster.RunOn(async() => { //处理offmeshlink if (VP1.World.DefaultScene.NavAreaActor != null) { foreach (var actor in VP1.World.DefaultScene.NavAreaActor.GetChildrenUnsafe()) { EngineNS.Bricks.RecastRuntime.NavLinkProxyComponent NavLinkProxyComponent = actor.GetComponent <EngineNS.Bricks.RecastRuntime.NavLinkProxyComponent>(); if (NavLinkProxyComponent != null) { RCTileMeshBuilder.InputGeom.AddOffMeshConnections(NavLinkProxyComponent.StartPos, NavLinkProxyComponent.EndPos, NavLinkProxyComponent.Radius, NavLinkProxyComponent.Direction); } } } VP1.World.DefaultScene.NavMesh = RCTileMeshBuilder.BuildNavi(); EngineNS.Graphics.Mesh.CGfxMeshPrimitives pri = VP1.World.DefaultScene.NavMesh.CreateRenderMeshPrimitives(EngineNS.CEngine.Instance.RenderContext); if (pri == null) { return(false); } EngineNS.GamePlay.Actor.GActor debugactor = await VP1.World.DefaultScene.NavMesh.CreateRenderActor(EngineNS.CEngine.Instance.RenderContext, pri); if (VP1.World.NavMeshActorID != null) { VP1.World.RemoveEditorActor(VP1.World.NavMeshActorID); } debugactor.Visible = EngineNS.CEngine.IsRenderNavMesh; VP1.World.AddEditorActor(debugactor); //if (VP1.World.DefaultScene.NavAreaActor == null) //{ // VP1.World.DefaultScene.CreateNavActor(); //} //VP1.World.DefaultScene.NavAreaActor.Children.Add(debugactor); //VP1.DRefreshActors(); VP1.World.NavMeshActorID = debugactor.ActorId; return(true); }, EngineNS.Thread.Async.EAsyncTarget.AsyncEditor); }
private async Task CreateNavRenderMesh() { if (VP1.World.DefaultScene.NavMesh != null) { EngineNS.Graphics.Mesh.CGfxMeshPrimitives pri = VP1.World.DefaultScene.NavMesh.CreateRenderMeshPrimitives(EngineNS.CEngine.Instance.RenderContext); if (pri == null) { return; } EngineNS.GamePlay.Actor.GActor debugactor = await VP1.World.DefaultScene.NavMesh.CreateRenderActor(EngineNS.CEngine.Instance.RenderContext, pri); if (VP1.World.NavMeshActorID != null) { VP1.World.RemoveEditorActor(VP1.World.NavMeshActorID); } debugactor.Visible = EngineNS.CEngine.IsRenderNavMesh; VP1.World.AddEditorActor(debugactor); VP1.World.NavMeshActorID = debugactor.ActorId; } }