/// <summary>
        /// For a given Scene Asset object reference, extract its build settings data, including buildIndex.
        /// </summary>
        public static EditorBuildScene GetBuildScene(Object sceneAssetObject)
        {
            EditorBuildScene bSceneInfo = new EditorBuildScene
            {
                buildIndex = -1,
                assetGUID  = new GUID(string.Empty)
            };

            if (sceneAssetObject as SceneAsset == null)
            {
                return(bSceneInfo);
            }

            bSceneInfo.assetPath = AssetDatabase.GetAssetPath(sceneAssetObject);
            bSceneInfo.assetGUID = new GUID(AssetDatabase.AssetPathToGUID(bSceneInfo.assetPath));

            var scenes = EditorBuildSettings.scenes;

            for (var index = 0; index < scenes.Length; ++index)
            {
                if (bSceneInfo.assetGUID.Equals(scenes[index].guid))
                {
                    bSceneInfo.scene      = scenes[index];
                    bSceneInfo.buildIndex = index;
                    return(bSceneInfo);
                }
            }

            return(bSceneInfo);
        }
        public static void RemoveSceneFromBuild(ref EditorBuildScene editorBuildScene)
        {
            List <EditorBuildSettingsScene> buildScenesList = new List <EditorBuildSettingsScene>(EditorBuildSettings.scenes);

            buildScenesList.RemoveAt(editorBuildScene.buildIndex);
            EditorBuildSettings.scenes = buildScenesList.ToArray();

            editorBuildScene.buildIndex = -1;
            editorBuildScene.scene      = null;
        }
        public static void SetBuildIndex(ref EditorBuildScene editorBuildScene, int buildIndex)
        {
            buildIndex = Mathf.Clamp(buildIndex, -1, EditorBuildSettings.scenes.Length - 1);

            if (buildIndex >= 0)
            {
                List <EditorBuildSettingsScene> buildScenesList = new List <EditorBuildSettingsScene>(EditorBuildSettings.scenes);
                EditorBuildSettingsScene        ebsScene        = buildScenesList[editorBuildScene.buildIndex];
                buildScenesList.RemoveAt(editorBuildScene.buildIndex);

                buildScenesList.Insert(buildIndex, ebsScene);

                EditorBuildSettings.scenes = buildScenesList.ToArray();

                editorBuildScene.buildIndex = buildIndex;
                editorBuildScene.scene      = EditorBuildSettings.scenes[buildIndex];
            }
            else
            {
                RemoveSceneFromBuild(ref editorBuildScene);
            }
        }