示例#1
0
            /// <summary>
            /// Display Dialog to add a scene to build settings
            /// </summary>
            static public void AddBuildScene(BuildScene buildScene, bool force = false, bool enabled = true)
            {
                if (force == false)
                {
                    int selection = EditorUtility.DisplayDialogComplex(
                        "Add Scene To Build",
                        "You are about to add scene at " + buildScene.assetPath + " To the Build Settings.",
                        "Add as Enabled",       // option 0
                        "Add as Disabled",      // option 1
                        "Cancel (do nothing)"); // option 2

                    switch (selection)
                    {
                    case 0:     // enabled
                        enabled = true;
                        break;

                    case 1:     // disabled
                        enabled = false;
                        break;

                    default:
                    case 2:     // cancel
                        return;
                    }
                }

                EditorBuildSettingsScene        newScene   = new EditorBuildSettingsScene(buildScene.assetGUID, enabled);
                List <EditorBuildSettingsScene> tempScenes = EditorBuildSettings.scenes.ToList();

                tempScenes.Add(newScene);
                EditorBuildSettings.scenes = tempScenes.ToArray();
            }
示例#2
0
            /// <summary>
            ///     For a given Scene Asset object reference, extract its build settings data, including buildIndex.
            /// </summary>
            public static BuildScene GetBuildScene(Object sceneObject)
            {
                var entry = new BuildScene
                {
                    BuildIndex = -1,
                    AssetGuid  = new GUID(string.Empty)
                };

                if (sceneObject as SceneAsset == null)
                {
                    return(entry);
                }

                entry.AssetPath = AssetDatabase.GetAssetPath(sceneObject);
                entry.AssetGuid = new GUID(AssetDatabase.AssetPathToGUID(entry.AssetPath));

                var scenes = EditorBuildSettings.scenes;

                for (var index = 0; index < scenes.Length; ++index)
                {
                    if (!entry.AssetGuid.Equals(scenes[index].guid))
                    {
                        continue;
                    }

                    entry.Scene      = scenes[index];
                    entry.BuildIndex = index;
                    return(entry);
                }

                return(entry);
            }
示例#3
0
            /// <summary>
            /// For a given Scene Asset object reference, extract its build settings data, including buildIndex.
            /// </summary>
            static public BuildScene GetBuildScene(Object sceneObject)
            {
                BuildScene entry = new BuildScene()
                {
                    buildIndex = -1,
                    assetGUID  = new GUID(string.Empty)
                };

                if (sceneObject as SceneAsset == null)
                {
                    return(entry);
                }

                entry.assetPath = AssetDatabase.GetAssetPath(sceneObject);
                entry.assetGUID = new GUID(AssetDatabase.AssetPathToGUID(entry.assetPath));

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

                return(entry);
            }
            /// <summary>
            /// Display Dialog to remove a scene from build settings (or just disable it)
            /// </summary>
            public static void RemoveBuildScene(BuildScene buildScene, bool force = false)
            {
                bool onlyDisable = false;

                if (force == false)
                {
                    int selection = -1;

                    const string title   = "Remove Scene From Build";
                    string       details =
                        "You are about to remove the following scene from build settings:\n" +
                        $"{buildScene.assetPath}\n" +
                        $"buildIndex: {buildScene.buildIndex}" +
                        "\n\nThis will modify build settings, but the scene asset will remain untouched.";

                    string confirm = "Remove From Build";
                    string alt     = "Just Disable";
                    string cancel  = "Cancel (do nothing)";

                    if (buildScene.scene.enabled)
                    {
                        details  += "\n\nIf you want, you can also just disable it instead.";
                        selection = EditorUtility.DisplayDialogComplex(title, details, confirm, alt, cancel);
                    }
                    else
                    {
                        selection = EditorUtility.DisplayDialog(title, details, confirm, cancel) ? 0 : 2;
                    }

                    switch (selection)
                    {
                    case 0:     // remove
                        break;

                    case 1:     // disable
                        onlyDisable = true;
                        break;

                    default:
                        return;
                    }
                }

                // User chose to not remove, only disable the scene
                if (onlyDisable)
                {
                    SetBuildSceneState(buildScene, false);
                }
                // User chose to fully remove the scene from build settings
                else
                {
                    List <EditorBuildSettingsScene> tempScenes = EditorBuildSettings.scenes.ToList();
                    tempScenes.RemoveAll(scene => scene.guid.Equals(buildScene.assetGUID));
                    EditorBuildSettings.scenes = tempScenes.ToArray();
                }
            }
示例#5
0
 public bool TryGetBuildScene(string sceneName, out BuildScene buildScene)
 {
     for (int i = 0; i < _buildScenes.Count; i++) {
         if (_buildScenes [i]._sceneName == sceneName) {
             buildScene = _buildScenes [i];
             return true;
         }
     }
     buildScene = new BuildScene ();
     return false;
 }
示例#6
0
    private void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }
        else if (instance != this)
        {
            Destroy(gameObject);
        }

        AddScenes();
        StartCoroutine(LoadYourAsyncScene(buildMainScene, LoadSceneMode.Single));
    }
示例#7
0
            /// <summary> Enable/Disable a given scene in the buildSettings </summary>
            public static void SetBuildSceneState(BuildScene buildScene, bool enabled)
            {
                var modified       = false;
                var scenesToModify = EditorBuildSettings.scenes;

                foreach (var curScene in scenesToModify.Where(curScene => curScene.guid.Equals(buildScene.assetGUID)))
                {
                    curScene.enabled = enabled;
                    modified         = true;
                    break;
                }
                if (modified)
                {
                    EditorBuildSettings.scenes = scenesToModify;
                }
            }
示例#8
0
        /// <summary>
        /// Enable/Disable a given scene in the buildSettings
        /// </summary>
        static public void SetBuildSceneState(BuildScene buildScene, bool enabled)
        {
            bool modified = false;

            EditorBuildSettingsScene[] scenesToModify = EditorBuildSettings.scenes;
            foreach (var curScene in scenesToModify)
            {
                if (curScene.guid.Equals(buildScene.assetGUID))
                {
                    curScene.enabled = enabled;
                    modified         = true;
                    break;
                }
            }
            if (modified)
            {
                EditorBuildSettings.scenes = scenesToModify;
            }
        }
示例#9
0
    protected override JobHandle OnUpdate(JobHandle inputDeps)
    {
        var arrayEntity = m_Query.ToEntityArray(Allocator.TempJob);

        prefabEntity = arrayEntity[0];

        BuildScene buildScene = new BuildScene
        {
            commandBuffer = endSimulationEntityCommandBufferSystem.CreateCommandBuffer().ToConcurrent(),
            prefabEntity  = prefabEntity
        };

        arrayEntity.Dispose();

        inputDeps = buildScene.Schedule(this, inputDeps);
        endSimulationEntityCommandBufferSystem.AddJobHandleForProducer(inputDeps);

        return(inputDeps);
    }
示例#10
0
        /// <summary> Display Dialog to remove a scene from build settings (or just disable it) </summary>
        public static void RemoveBuildScene(BuildScene buildScene, bool force = false)
        {
            if (force == false)
            {
                bool selection = EditorUtility.DisplayDialog(
                    "Add Scene To Build",
                    "Are you sure you want to remove " + buildScene.assetPath + " at index " + buildScene.buildIndex + " from the Build Settings?",
                    "Yes", "No");

                if (!selection)
                {
                    return;
                }
            }

            List <EditorBuildSettingsScene> tempScenes = EditorBuildSettings.scenes.ToList();

            tempScenes.RemoveAll(scene => scene.guid.Equals(buildScene.assetGUID));
            EditorBuildSettings.scenes = tempScenes.ToArray();
        }
示例#11
0
        /// <summary> Enable/Disable a given scene in the buildSettings. </summary>
        public static void SetBuildSceneState(BuildScene buildScene, bool enabled)
        {
            bool modified = false;

            EditorBuildSettingsScene[] scenesToModify = EditorBuildSettings.scenes;
            for (int i = 0; i < scenesToModify.Length; i++)
            {
                EditorBuildSettingsScene curScene = scenesToModify[i];
                if (curScene.guid.Equals(buildScene.assetGUID))
                {
                    curScene.enabled = enabled;
                    modified         = true;
                    break;
                }
            }
            if (modified)
            {
                EditorBuildSettings.scenes = scenesToModify;
            }
        }
示例#12
0
            /// <summary> Display Dialog to remove a scene from build settings (or just disable it) </summary>
            public static void RemoveBuildScene(BuildScene buildScene)
            {
                if (!EditorUtility.DisplayDialog(
                        "Remove Scene From Build",
                        $"You are about to remove the following scene from build settings:\n{buildScene.assetPath}\nBuild index:{buildScene.buildIndex}\n\nThis will modify build settings, but the scene asset will remain untouched.",
                        "Remove From Build",
                        "Cancel"
                        ))
                {
                    return;
                }

                // User chose to fully remove the scene from build settings
                else
                {
                    var tempScenes = EditorBuildSettings.scenes.ToList();
                    tempScenes.RemoveAll(scene => scene.guid.Equals(buildScene.assetGUID));
                    EditorBuildSettings.scenes = tempScenes.ToArray();
                }
            }
示例#13
0
 public void LoadFromBuildSettings()
 {
     #if UNITY_EDITOR
     _buildScenes.Clear ();
     for (int i=0; i<UnityEditor.SceneManagement.EditorSceneManager.sceneCountInBuildSettings; i++) {
         BuildScene buildScene = new BuildScene ();
         SceneAsset sceneFile = AssetDatabase.LoadAssetAtPath<SceneAsset> (EditorBuildSettings.scenes[i].path);
         buildScene._sceneName = sceneFile.name;
         buildScene._index = i;
         var prefPath = System.IO.Path.Combine (_sceneRootPrefabsPath, sceneFile.name+"(Root)");
         buildScene._rootPrefabPath = prefPath.Replace ("Assets/Resources/", "");
         buildScene._rootPrefab = AssetDatabase.LoadAssetAtPath<GameObject> (prefPath + ".prefab");
         prefPath = System.IO.Path.Combine (_sceneRootPrefabsPath.Replace ("Root", "UI"), sceneFile.name+"(UI)");
         buildScene._uiPrefabPath = prefPath.Replace ("Assets/Resources/", "");
         buildScene._uiPrefab = AssetDatabase.LoadAssetAtPath<GameObject> (prefPath + ".prefab");
         buildScene._sceneFile = sceneFile;
         _buildScenes.Add (buildScene);
     }
     #endif
 }
示例#14
0
        /// <summary> Display Dialog to add a scene to build settings  </summary>
        public static void AddBuildScene(BuildScene buildScene, bool force = false, bool enabled = true)
        {
            if (force == false)
            {
                bool selection = EditorUtility.DisplayDialog(
                    "Add Scene To Build",
                    "Are you sure you want to add " + buildScene.assetPath + " to the Build Settings?",
                    "Yes", "No");

                if (!selection)
                {
                    return;
                }
            }

            EditorBuildSettingsScene        newScene   = new EditorBuildSettingsScene(buildScene.assetGUID, enabled);
            List <EditorBuildSettingsScene> tempScenes = EditorBuildSettings.scenes.ToList();

            tempScenes.Add(newScene);
            EditorBuildSettings.scenes = tempScenes.ToArray();
        }
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        var sceneAssetProperty = GetSceneAssetProperty(property);

        position.height = lineHeight;

        EditorGUI.BeginProperty(position, GUIContent.none, property);
        EditorGUI.BeginChangeCheck();
        int        sceneControlID = GUIUtility.GetControlID(FocusType.Passive);
        var        selectedObject = EditorGUI.ObjectField(position, label, sceneAssetProperty.objectReferenceValue, typeof(SceneAsset), false);
        BuildScene buildScene     = GetBuildScene(selectedObject);

        if (EditorGUI.EndChangeCheck())
        {
            sceneAssetProperty.objectReferenceValue = selectedObject;
            if (buildScene.scene == null)
            {
                GetScenePathProperty(property).stringValue = string.Empty;
            }
        }
        position.y += paddedLine;

        EditorGUI.EndProperty();
    }
示例#16
0
 void Awake()
 {
     m_Instance = this;
 }