예제 #1
0
            public void Dispatch(Object asset, PostprocessEventArgs args)
            {
                UnityEngine.Assertions.Assert.AreEqual(asset.GetType(), typeof(TAsset));

                AssetHandler(asset, args);
                TypedAssetHandler((TAsset)asset, args);
            }
        private void HandleImportSceneAsset(SceneAsset asset, PostprocessEventArgs args)
        {
            var assetGuid = args.AssetGuid;
            var sceneGuid = new SceneGuid {
                Guid = new Guid(asset.Guid)
            };

            m_AssetGuidToSceneGuid.TryAdd(assetGuid, sceneGuid);
            m_SceneGuidToAssetGuid.TryAdd(sceneGuid, assetGuid);
        }
        private void HandleDeleteAsset(PostprocessEventArgs args)
        {
            var assetGuid = args.AssetGuid;

            // Handle deleting scene
            if (m_AssetGuidToSceneGuid.TryGetValue(assetGuid, out var sceneGuid))
            {
                m_AssetGuidToSceneGuid.Remove(assetGuid);
                m_SceneGuidToAssetGuid.Remove(sceneGuid);

                // Remove scene from project
                var wm = Session.GetManager <IWorldManager>();
                Project.RemoveScene(wm.EntityManager, wm.GetConfigEntity(), new SceneReference {
                    SceneGuid = sceneGuid.Guid
                });

                // Called last as this will invoke OnScene unload listeners so we need to ensure
                // we've updated all state before they are called
                Session.GetManager <IEditorSceneManagerInternal>().UnloadAllScenesByGuid(sceneGuid);
            }

            // Handle deleting project
            var project = Project.Projects.FirstOrDefault(p => p.Guid == new Guid(args.AssetGuid));

            if (project != null)
            {
                if (project == Application.AuthoringProject)
                {
                    EditorApplication.delayCall += () => { Application.SetAuthoringProject(null); };
                }
                else
                {
                    project.Dispose();
                }
            }
        }