protected override async Task <bool> Initialize(EditorServiceGame editorGame) { if (editorGame == null) { throw new ArgumentNullException(nameof(editorGame)); } game = editorGame as SceneEditorGame; if (game == null) { throw new ArgumentException($"{nameof(game)} is not of type {nameof(EntityHierarchyEditorGame)}"); } sceneEditorController = editor.Controller as SceneEditorController; if (sceneEditorController == null) { throw new ArgumentNullException(nameof(sceneEditorController)); } gameSettingsProviderService = editor.ServiceProvider.Get <GameSettingsProviderService>(); gameSettingsProviderService.GameSettingsChanged += GameSettingsProviderServiceOnGameSettingsChanged; await navigationMeshManager.Initialize(); game.SceneAdded += GameOnSceneAdded; game.SceneRemoved += GameOnSceneRemoved; // Add debug entity rootDebugEntity = new Entity("Navigation debug entity"); game.EditorScene.Entities.Add(rootDebugEntity); // Handle added/updated navigation meshes so that they can be made visible when this scene is shown editor.Session.AssetPropertiesChanged += OnAssetPropertiesChanged; editor.Session.DeletedAssetsChanged += OnDeletedAssetsChanged; editorGame.Script.AddTask(async() => { while (editorGame.IsRunning) { Update(); await editorGame.Script.NextFrame(); } }); // Initial update foreach (var asset in editor.Session.AllAssets) { if (asset.AssetType == typeof(NavigationMeshAsset)) { await UpdateNavigationMeshLink(asset); } } // Update linked navigation meshes when loaded content has changed // this happens when a navigation mesh gets recompiled by changes in the scene or navigation mesh asset navigationMeshManager.Changed += NavigationMeshManagerOnChanged; SetDynamicNavigationSystem(game.GameSystems.OfType <DynamicNavigationMeshSystem>().FirstOrDefault()); game.GameSystems.CollectionChanged += GameSystemsOnCollectionChanged; return(true); }
// Use this for initialization void Start() { gameController = gameControllerObj.GetComponent <GameController>(); sceneEditorController = sceneEditorControllerObj.GetComponent <SceneEditorController>(); }