Example #1
0
    static void Build()
    {
        var layerNames = new List<string>();

        var objs = Resources.FindObjectsOfTypeAll<Object>();
        var sortingLayers = new List<string>();
        var inputNames = new List<string>();
        var navMeshLayers = new List<string>();

        foreach (var obj in objs)
        {
            switch (obj.name)
            {
                case "InputManager":
                    {
                        var axesProperty = new SerializedObject(obj).FindProperty("m_Axes");

                        for (var j = 0; j < axesProperty.arraySize; j++)
                        {
                            inputNames.Add(axesProperty.GetArrayElementAtIndex(j).FindPropertyRelative("m_Name").stringValue);
                        }
                    }
                    break;
                case "TagManager":
                    {
                        var sortinglayersProperty = new SerializedObject(obj).FindProperty("m_SortingLayers");

                        for (var j = 0; j < sortinglayersProperty.arraySize; j++)
                        {
                            sortingLayers.Add(sortinglayersProperty.GetArrayElementAtIndex(j).FindPropertyRelative("name").stringValue);
                        }
                    }
                    break;

                case "NavMeshLayers":
                    {

                        var navMeshlayersObject = new SerializedObject(obj);

                        for (var j = 0; j < 3; j++)
                        {
                            navMeshLayers.Add(navMeshlayersObject.FindProperty("Built-in Layer " + j).FindPropertyRelative("name").stringValue);
                        }

                        for (var j = 0; j < 28; j++)
                        {
                            navMeshLayers.Add(navMeshlayersObject.FindProperty("User Layer " + j).FindPropertyRelative("name").stringValue);
                        }
                    }
                    break;
            }
        }

        for (var i = 0; i < 32; i++)
        {
            layerNames.Add(LayerMask.LayerToName(i));
        }

        AssetDatabase.StartAssetEditing();
        {
            Build("Tag", InternalEditorUtility.tags);
            Build("Layer", layerNames.ToArray());
            Build("SortingLayer", sortingLayers.ToArray());
            Build("NavMeshLayer", navMeshLayers.ToArray());
            Build("Input", inputNames.ToArray());
            Build("Scene", EditorBuildSettings.scenes.Where(scene => scene.enabled).Select<EditorBuildSettingsScene, string>(scene => Path.GetFileNameWithoutExtension(scene.path)).ToArray());
        }
        AssetDatabase.StopAssetEditing();
        EditorUtility.UnloadUnusedAssetsImmediate();
        AssetDatabase.Refresh(ImportAssetOptions.ImportRecursive);
    }
        static string GenerateFields(string indent, Options options)
        {
            var lines = new List<string> (128);
            var uniquesList = new HashSet<string> ();

            // layers, layer masks
            if ((int) (options & Options.Layers) != 0) {
                foreach (var layerName in InternalEditorUtility.layers) {
                    lines.Add (string.Format (LayerName, indent, CleanupName (layerName), CleanupValue (layerName)));
                    lines.Add (string.Format (LayerMask, indent, CleanupName (layerName)));
                }
            }

            // tags
            if ((int) (options & Options.Tags) != 0) {
                foreach (var tagName in InternalEditorUtility.tags) {
                    lines.Add (string.Format (TagName, indent, CleanupName (tagName), CleanupValue (tagName)));
                }
            }

            // scenes
            if ((int) (options & Options.Scenes) != 0) {
                foreach (var scene in EditorBuildSettings.scenes) {
                    var sceneName = Path.GetFileNameWithoutExtension (scene.path);
                    lines.Add (string.Format (SceneName, indent, CleanupName (sceneName), CleanupValue (sceneName)));
                }
            }

            // animators
            if ((int) (options & Options.Animators) != 0) {
                foreach (var guid in AssetDatabase.FindAssets ("t:animatorcontroller")) {
                    var assetPath = AssetDatabase.GUIDToAssetPath (guid);
                    var ac = AssetDatabase.LoadAssetAtPath<UnityEditor.Animations.AnimatorController> (assetPath);
                    for (int i = 0, iMax = ac.parameters.Length; i < iMax; i++) {
                        var name = ac.parameters[i].name;
                        if (!uniquesList.Contains (name)) {
                            lines.Add (string.Format (AnimatorName, indent, CleanupName (name), CleanupValue (name)));
                            uniquesList.Add (name);
                        }
                    }
                }
                uniquesList.Clear ();
            }

            // axes
            if ((int) (options & Options.Axes) != 0) {
                var inputManager = AssetDatabase.LoadAllAssetsAtPath ("ProjectSettings/InputManager.asset")[0];
                var axes = new SerializedObject (inputManager).FindProperty ("m_Axes");
                for (int i = 0, iMax = axes.arraySize; i < iMax; i++) {
                    var axis = axes.GetArrayElementAtIndex (i).FindPropertyRelative ("m_Name").stringValue;
                    if (!uniquesList.Contains (axis)) {
                        lines.Add (string.Format (AxisName, indent, CleanupName (axis), CleanupValue (axis)));
                        uniquesList.Add (axis);
                    }
                }
                uniquesList.Clear ();
            }

            // shaders
            if ((int) (options & Options.Shaders) != 0) {
                foreach (var guid in AssetDatabase.FindAssets ("t:shader")) {
                    var assetPath = AssetDatabase.GUIDToAssetPath (guid);
                    var shader = AssetDatabase.LoadAssetAtPath<Shader> (assetPath);
                    if (shader.name.IndexOf ("Hidden") != 0) {
                        for (int i = 0, iMax = ShaderUtil.GetPropertyCount (shader); i < iMax; i++) {
                            if (!ShaderUtil.IsShaderPropertyHidden (shader, i)) {
                                var name = ShaderUtil.GetPropertyName (shader, i);
                                if (!uniquesList.Contains (name)) {
                                    lines.Add (string.Format (ShaderName, indent, CleanupName (name), CleanupValue (name)));
                                    uniquesList.Add (name);
                                }
                            }
                        }
                    }
                }
                uniquesList.Clear ();
            }

            lines.Sort ();
            return string.Join ("\n\n", lines.ToArray ());
        }