Ejemplo n.º 1
0
    /// <summary>
    /// Draw all content of sortable a renderer.
    /// </summary>
    /// <param name="rect">The content rect for this renderer.</param>
    /// <param name="info">The renderer information.</param>
    /// <param name="select">The renderer is selected or not.</param>
    /// <param name="primary">The renderer is primary operation object or not.</param>
    /// <param name="warn">The renderer is warned or not.</param>
    void DrawRendererContent(Rect rect, SortingRendererInfo info, bool select, bool primary, bool warn)
    {
        info.leftEventRect = new Rect(rect.x, rect.y, 76f, rect.height);
        info.rightEventRect = new Rect(rect.x + 80f, rect.y, rect.width, rect.height);

        Color bgColor = GUI.backgroundColor;
        if (select)
        {
            if (EditorGUIUtility.isProSkin)
                GUI.backgroundColor = new Color(0.3f, 0.6f, 0.8f);
            else
                GUI.backgroundColor = new Color(0.6f, 0.85f, 1.0f);
            GUI.Label(new Rect(rect.x, rect.y, 76f, rect.height), "", style_contentbg0);
            GUI.Label(new Rect(rect.x + 80f, rect.y, rect.width - 162f, rect.height), "", style_contentbg1);
            GUI.Label(new Rect(rect.x + rect.width - 78f, rect.y, 78f, rect.height), "", style_contentbg1);
        }
        else
        {
            if (EditorGUIUtility.isProSkin)
                GUI.backgroundColor = new Color(0.35f, 0.35f, 0.35f);
            else
                GUI.backgroundColor = new Color(1.0f, 1.0f, 1.0f);
            GUI.Label(new Rect(rect.x, rect.y, 76f, rect.height), "", style_contentbg0);
            GUI.Label(new Rect(rect.x + 80f, rect.y, rect.width - 162f, rect.height), "", style_contentbg1);
            GUI.Label(new Rect(rect.x + rect.width - 78f, rect.y, 78f, rect.height), "", style_contentbg1);
        }
        GUI.backgroundColor = bgColor;

        Color ctColor = GUI.contentColor;
        if (EditorGUIUtility.isProSkin)
            GUI.contentColor = new Color(0.5f, 0.5f, 0.5f);
        else
            GUI.contentColor = new Color(0.8f, 0.8f, 0.8f);
        GUI.Label(new Rect(rect.x - 3f, rect.y, 22f, rect.height - 4f), TextureResources.verticalMoveIcon, style_contentlabel);
        GUI.contentColor = ctColor;

        if (info.renderer == _editSelectRenderer)
        {
            GUI.changed = false;
            int tempOrder = EditorGUI.IntField(new Rect(rect.x + 13f, rect.y + 1f, 47f, rect.height - 8f), info.order);
            tempOrder = Mathf.Clamp(tempOrder, -32768, 32767);
            if (GUI.changed && info.order != tempOrder)
            {
                Undo.RecordObject(info.renderer, "Sorting Order Change");
                info.renderer.sortingOrder = tempOrder;
                SceneView.RepaintAll();
            }
        }
        else
        {
            EditorGUIUtility.AddCursorRect(new Rect(rect.x, rect.y, 76f, rect.height), MouseCursor.ResizeVertical);
            GUI.Label(new Rect(rect.x + 14f, rect.y + 1f, 48f, rect.height - 4f), info.renderer.sortingOrder.ToString(), style_contentlabel);
        }
        
        if (warn)
        {
            GUI.Label(new Rect(rect.x + 60f, rect.y, 22f, rect.height - 4f), _warnContent, style_contentlabel);
        }

        Texture rendererIcon;
        System.Type rendererType = info.renderer.GetType();
        if (rendererType != typeof(ParticleSystemRenderer))
            rendererIcon = EditorGUIUtility.ObjectContent(null, rendererType).image;
        else
            rendererIcon = EditorGUIUtility.ObjectContent(null, typeof(ParticleSystem)).image;

        GUI.Label(new Rect(rect.x + 82, rect.y, 22f, rect.height - 4f), rendererIcon, style_contentlabel);
        string text = info.renderer.name;
        if (_fullPath)
        {
            Transform transform = info.renderer.transform;
            while (transform.parent != null)
            {
                text = transform.parent.name + "/" + text;
                transform = transform.parent;
            }
        }
        GUI.Label(new Rect(rect.x + 94, rect.y, rect.width - 178f, rect.height), "  " + text, style_contentlabel);

        bool tempCheck = false;

        GUI.changed = false;
        tempCheck = GUI.Toggle(new Rect(rect.x + rect.width - 72f, rect.y, 80f, rect.height - 6f), info.renderer.enabled, info.renderer.enabled? "Enable":"Disable", style_contenttoggle);
        if (GUI.changed && tempCheck != info.renderer.enabled)
        {
            if (!_selectRenderer.Contains(info.renderer))
            {
                Undo.RecordObject(info.renderer, "Renderer Enabled Change");
                info.renderer.enabled = tempCheck;
            }
            else
            {
                foreach (Renderer renderer in _selectRenderer)
                {
                    if (renderer != null)
                    {
                        Undo.RecordObject(renderer, "Renderer Enabled Change");
                        renderer.enabled = tempCheck;
                    }
                }
            }
        }

    }
Ejemplo n.º 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();
    }