using System.Collections.Generic; using System.Linq; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; namespace Chameleon.Editor { [CreateAssetMenu(menuName = "Chameleon/Scene Collection (Editor)")] public class SceneCollection : UnityEngine.ScriptableObject { public List sceneAssets = new(); [UnityEditor.Callbacks.OnOpenAsset] public static bool OnOpenAsset(int instanceID, int _) { var @object = EditorUtility.EntityIdToObject(instanceID); if (@object is SceneCollection sceneCollection) sceneCollection.Open(); return false; } public void Open() { if (sceneAssets.Count == 0) return; OpenScene(sceneAssets.First(), OpenSceneMode.Single); foreach (var sceneAsset in sceneAssets.Skip(1)) OpenScene(sceneAsset, OpenSceneMode.Additive); } static void OpenScene(SceneAsset sceneAsset, OpenSceneMode mode) { var scenePath = AssetDatabase.GetAssetPath(sceneAsset); EditorSceneManager.OpenScene(scenePath, mode); } } }