private void InitializeDefaults() { SceneManagerAssetPath = AssetDatabase.GetAssetPath(SerializedManager.targetObject); bool wasCreated = false; AssetFilter assetFilter = AssetDatabaseExtensions. FindOrCreateSubScriptableObject <AssetFilter>(SceneManagerAssetPath, "SceneFilter", out wasCreated); if (wasCreated) { assetFilter.IncludeIfNoMatch = true; } SerializedSceneFilter = new SerializedObject(assetFilter); SceneHunter sceneHunter = AssetDatabaseExtensions. GetFirstSubAssetOf <SceneHunter>(SceneManagerAssetPath); if (sceneHunter == null) { sceneHunter = AssetDatabaseExtensions. CreateSubScriptableObject <UnitySceneHunter>(SceneManagerAssetPath, "SceneHunter"); } ScenePopulator = new SerializedObject(sceneHunter); SceneNodes = AssetDatabaseExtensions. FindOrCreateSubScriptableObject <SceneNodeCollection>(SceneManagerAssetPath, "SceneNodes", out wasCreated); if (wasCreated) { SceneNodes.SceneManager = TargetManager; } SceneNodes.PopulateSceneInfos(); SceneNodesObject = new SerializedObject(SceneNodes); SceneNodesProp = SceneNodesObject.FindProperty("sceneNodes"); if (AssetDatabaseExtensions.GetSubAssetsOfType <SceneVariableContainer>(TargetManager).Count() == 0) { TargetManager.SceneVariables.name = "ManagerVariables"; AssetDatabase.AddObjectToAsset(TargetManager.SceneVariables, TargetManager); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(TargetManager)); } SerializedManager.ApplyModifiedProperties(); ScenesProp = SerializedManager.FindProperty("scenes"); EntrySceneIdProp = SerializedManager.FindProperty("entrySceneId"); AnyScenesProp = SerializedManager.FindProperty("anyScene"); UseOnPlayProp = SerializedManager.FindProperty("useOnPlay"); GoToOnPlay = SerializedManager.FindProperty("goToOnPlay"); SerializedVariables = new SerializedSceneVariableCollection(TargetManager.SceneVariables); }
internal void DeleteSceneNode(int sceneId, bool addToExclusionFilter) { SceneModel model = TargetManager.scenes.Find((x) => x.SceneId == sceneId); if (sceneId == TargetManager.AnyScene.SceneId) { return; } if (model == null) { return; } Undo.SetCurrentGroupName("Delete Scene Node"); int undoGroup = Undo.GetCurrentGroup(); Undo.RegisterCompleteObjectUndo(SceneNodesObject.targetObject, "Scene Nodes"); SerializedProperty scenesProperty = ScenesProp; for (int i = scenesProperty.arraySize - 1; i >= 0; i--) { SerializedSceneModel serializedScene = GetSerializedSceneModel(i); serializedScene.DeleteTransitionsInvolving(sceneId); if (serializedScene.SceneIdProp.intValue == sceneId) { scenesProperty.DeleteArrayElementAtIndex(i); } } SerializedManager.ApplyModifiedProperties(); for (int i = 0; i < SceneNodesProp.arraySize; i++) { if (GetSceneNodeIdProperty(i).intValue == sceneId) { SceneNodesProp.DeleteArrayElementAtIndex(i); break; } } SceneNodesObject.ApplyModifiedProperties(); if (addToExclusionFilter) { SerializedProperty exclusion = SerializedSceneFilter.FindProperty("FilesToExclude"); SerializedProperty newEntry = exclusion.AddArrayElement(); newEntry.stringValue = model.SceneAssetPath; SerializedSceneFilter.ApplyModifiedProperties(); } Undo.CollapseUndoOperations(undoGroup); }
public void ReplaceScenePopulator(System.Type scenePopulatorType) { if (!scenePopulatorType.IsSubclassOf(typeof(SceneHunter))) { return; } Undo.SetCurrentGroupName("Scene Populator Change"); int undoGroup = Undo.GetCurrentGroup(); Undo.DestroyObjectImmediate(ScenePopulator.targetObject); ScenePopulator = new SerializedObject(AssetDatabaseExtensions. FindOrCreateSubScriptableObject <SceneHunter>(TargetManager, scenePopulatorType, "SceneHunter")); Undo.RegisterCreatedObjectUndo(ScenePopulator.targetObject, "Scene Populator Creation"); Undo.CollapseUndoOperations(undoGroup); AssetDatabase.ImportAsset(SceneManagerAssetPath); SerializedManager.ApplyModifiedProperties(); SerializedManager.Update(); }