public static void CreateMyAsset() { GameManifest asset = ScriptableObject.CreateInstance <GameManifest>(); AssetDatabase.CreateAsset(asset, "Assets/GameManifest.asset"); AssetDatabase.SaveAssets(); EditorUtility.FocusProjectWindow(); Selection.activeObject = asset; }
private void OnGUI() { if (!inited) { Init(); } scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition, false, false); EditorGUIUtility.labelWidth = 75; EditorGUILayout.Space(); EditorGUILayout.LabelField("Manifest Editor", EditorStyles.boldLabel); manifest = (GameManifest)EditorGUILayout.ObjectField("Manifest:", manifest, typeof(GameManifest), false); DrawLine(); if (manifest == null) { EditorGUILayout.EndScrollView(); return; } // -------------------------------------------------------- // Scenes // -------------------------------------------------------- EditorGUILayout.LabelField("List of scenes that are not in the Player Settings that should be based on this Manifest", EditorStyles.boldLabel); foreach (SceneAsset scene in manifest.Scenes) { string scenePath = AssetDatabase.GetAssetPath(scene); EditorBuildSettingsScene found = EditorBuildSettings.scenes.FirstOrDefault(item => item.path == scenePath); if (found == null) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Missing:", (scene == null) ? "[Missing]" : scenePath, red); if (scene != null && GUILayout.Button("Add", GUILayout.Width(100))) { List <EditorBuildSettingsScene> editorBuildSettingsScenes = EditorBuildSettings.scenes.ToList <EditorBuildSettingsScene>(); editorBuildSettingsScenes.Add(new EditorBuildSettingsScene(scenePath, true)); EditorBuildSettings.scenes = editorBuildSettingsScenes.ToArray(); } EditorGUILayout.EndHorizontal(); } else { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Found:", scenePath, green); if (GUILayout.Button("Select", GUILayout.Width(100))) { Selection.activeObject = scene; } EditorGUILayout.EndHorizontal(); } } if (manifest.Scenes.Length < 1) { EditorGUILayout.LabelField("No scene files!"); } EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.LabelField("List of scenes that are in the Player Settings in the Game folder but not in the Manifest", EditorStyles.boldLabel); // Scences that are in the Game Root Folder, that are not in the Player Settings. bool foundOne = false; foreach (EditorBuildSettingsScene editorScene in EditorBuildSettings.scenes) { if (editorScene.path.StartsWith(AssetDatabase.GetAssetPath(manifest.GameRootFolder))) { SceneAsset found = manifest.Scenes.FirstOrDefault(item => AssetDatabase.GetAssetPath(item) == editorScene.path); if (!found) { foundOne = true; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Missing:", editorScene.path, red); if (GUILayout.Button("Remove", GUILayout.Width(100))) { List <EditorBuildSettingsScene> editorBuildSettingsScenes = EditorBuildSettings.scenes.ToList <EditorBuildSettingsScene>(); EditorBuildSettingsScene remove = editorBuildSettingsScenes.FirstOrDefault(item => item.path == editorScene.path); editorBuildSettingsScenes.Remove(remove); EditorBuildSettings.scenes = editorBuildSettingsScenes.ToArray(); } EditorGUILayout.EndHorizontal(); } } } if (!foundOne) { EditorGUILayout.LabelField("None found!"); } EditorGUILayout.Space(); EditorGUILayout.Space(); // -------------------------------------------------------- // Shaders // -------------------------------------------------------- EditorGUILayout.LabelField("List of shaders, there isn't a way to check in code if they are preloaded or not :(", EditorStyles.boldLabel); foreach (Shader shader in manifest.Shaders) { string shaderPath = AssetDatabase.GetAssetPath(shader); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Shader: ", (shader == null) ? "[Missing]" : shaderPath, yellow); if (shader != null && GUILayout.Button("Select", GUILayout.Width(100))) { Selection.activeObject = shader; } EditorGUILayout.EndHorizontal(); } if (manifest.Shaders.Length < 1) { EditorGUILayout.LabelField("No shader files!"); } EditorGUILayout.EndScrollView(); }