NGUI图片置灰方法

1.修改Transparent Colored系列shader,通过设置Color.rgb来设置灰度

2.增加灰度系列shader,通过更换Sprite的material来设置灰度

using UnityEngine;
using System.Collections;

///


/// 设置图片灰度
///

public class UISpriteExt : UISprite {

    protected UIPanel m_panel = null;
    protected Material m_grayMaterial;

    public override Material material{
        get{
            Material mat = base.material;
            if (mat == null) {
                mat = (atlas != null) ? atlas.spriteMaterial : null;
            }
            if (m_grayMaterial != null)
                return m_grayMaterial;
            else
                return mat;
        }
    }

    public void SetEnabled(bool isEnable) {
        if (isEnable){
            BoxCollider lisener = GetLisener();
            if (lisener)
                lisener.enabled = true;
            SetNormal();
        }
        else {
            BoxCollider lisener = GetLisener();
            if (lisener)
                lisener.enabled = false;
            SetGray();
        }
    }


    BoxCollider GetLisener(GameObject target) {
        BoxCollider lisener = target.GetComponent();
        if (lisener != null){
            return lisener;
        }
        else{
            GameObject parent = target.transform.parent.gameObject;
            if (parent != null){
                return GetLisener(target);
            }
            else {
                return lisener;
            }
        }
    }

    BoxCollider GetLisener() {
        BoxCollider lisener = gameObject.GetComponent();
        if (lisener == null)
            lisener = gameObject.transform.parent.GetComponent();

        return lisener;
    }

    public void SetNormal(){
        m_grayMaterial = null;
        RefreshPanel(gameObject);
    }


    public void SetGray(){
        Material mat = new Material(Shader.Find("Unlit/Transparent Colored Grey"));
        mat.mainTexture = material.mainTexture;
        m_grayMaterial = mat;

        RefreshPanel(gameObject);
    }

    void RefreshPanel(GameObject go){
        if (m_panel == null){
            m_panel = NGUITools.FindInParents(go);
        }

        if (m_panel != null){
            m_panel.enabled = false;
            m_panel.enabled = true;
        }
    }

}
3.直接修改Color为Color.Gray看看是否可以符合要求

你可能感兴趣的:(NGUI图片置灰方法)