Exemple #1
0
        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>();
    }