Пример #1
0
    /// <summary>
    /// Draw sorting layer title GUI.
    /// </summary>
    /// <param name="toggle">Show renderers or not at last frame.</param>
    /// <param name="info">Sorting layer infomation.</param>
    /// <returns>Show renderers or not at this frame.</returns>
    bool DrawLayerTitle(bool toggle, SortingLayerInfo info)
    {
        Rect rect = GUILayoutUtility.GetRect(50f, 32f, GUILayout.ExpandWidth(true));

        string text = info.name;
        Color bgColor = GUI.backgroundColor;

        foreach (Renderer renderer in _selectRenderer)
        {
            if (renderer != null)
            {
                string layerName = renderer.sortingLayerName;
                if (layerName == "")
                    layerName = "Default";
                if (layerName == info.name)
                {
                    if (EditorGUIUtility.isProSkin)
                        GUI.backgroundColor = new Color(0.4f, 0.7f, 0.9f);
                    else
                        GUI.backgroundColor = new Color(0.55f, 0.75f, 0.9f);
                    GUI.Label(rect, "", style_layertitlelight);
                    break;
                }
            }
        }

        if (EditorGUIUtility.isProSkin)
        {
            text = "<color=white><size=14>" + text + "</size></color>";
            GUI.backgroundColor = new Color(0.5f, 0.5f, 0.5f);
        }
        else
        {
            text = "<color=black><size=14>" + text + "</size></color>";
            GUI.backgroundColor = new Color(0.8f, 0.8f, 0.8f);
        }
        bool newToggle = GUI.Toggle(rect, toggle, text, style_layertitle);
        GUI.backgroundColor = bgColor;
        
        info.dropEventRect = rect;

        return newToggle;
    }
Пример #2
0
    /// <summary>
    /// Scan all the scene hierarchy for sortable renderers.
    /// </summary>
    void OnInspectorUpdate()
    {
        _layerList.Clear();

        // Get the sequence of all sorting layers.
        System.Type internalEditorUtilityType = typeof(InternalEditorUtility);
        PropertyInfo sortingLayersProperty = internalEditorUtilityType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic);
        string[] sortingLayerNames = (string[])sortingLayersProperty.GetValue(null, new object[0]);

        // Initialize sorting layer info.
        foreach (string name in sortingLayerNames)
        {
            SortingLayerInfo info = new SortingLayerInfo();
            info.name = name;
            _layerList.Add(info);
        }

        // Find all sortable renderers, then sort them.
        Renderer[] rendererArray = UnityEngine.Object.FindObjectsOfType<Renderer>();

        int defaultOrder = 0;
        foreach (Renderer renderer in rendererArray)
        {
            Material mat = renderer.sharedMaterial;
            if (mat != null && mat.renderQueue == 3000)
            {
                string sortingLayerName = renderer.sortingLayerName;
                if (sortingLayerName == string.Empty)
                    sortingLayerName = "Default";
                foreach (SortingLayerInfo layerInfo in _layerList)
                {
                    if (layerInfo.name == sortingLayerName)
                    {
                        int index = 0;
                        foreach (SortingRendererInfo sortedRendererInfo in layerInfo.rendererList)
                        {
                            if (renderer.sortingOrder <= sortedRendererInfo.order)
                                break;
                            index++;
                        }

                        SortingRendererInfo rendererInfo = new SortingRendererInfo();
                        rendererInfo.renderer = renderer;
                        rendererInfo.order = renderer.sortingOrder;
                        rendererInfo.defaultOrder = defaultOrder++;
                        if (index == layerInfo.rendererList.Count)
                            layerInfo.rendererList.Add(rendererInfo);
                        else
                            layerInfo.rendererList.Insert(index, rendererInfo);
                    }
                }
            }
        }

        Repaint();
    }