Пример #1
0
        /// <summary>
        /// Modifies the material.
        /// </summary>
        public override void ModifyMaterial()
        {
            bool    isTpImage = false;
            Texture _AlphaTex = null;
            string  key       = "";

            if (graphic is LImageForTP)
            {
                var image = graphic as LImageForTP;
                isTpImage = true;
                _AlphaTex = AtlasManager.Instance.GetAtlasInfoBySpriteName(image.m_SpriteName).m_Mat.GetTexture("_AlphaTex");

                string noiseKey  = (m_NoiseTexture ? m_NoiseTexture.GetInstanceID().ToString() : "null");
                string spriteKey = _AlphaTex.GetInstanceID().ToString();
                key = string.Format("{0}{1}{2}", noiseKey, spriteKey, m_ColorMode);
            }
            else
            {
                string noiseKey = (m_NoiseTexture ? m_NoiseTexture.GetInstanceID().ToString() : "null");
                key = string.Format("{0}{1}", noiseKey, m_ColorMode);
            }

            if (_materialCache != null && (_materialCache.key != key || !isActiveAndEnabled || !m_EffectMaterial))
            {
                MaterialCache.Unregister(_materialCache);
                _materialCache = null;
            }

            if (!isActiveAndEnabled || !m_EffectMaterial)
            {
                material = null;
            }
            else if (!m_NoiseTexture)
            {
                material = m_EffectMaterial;
            }
            else if (_materialCache != null && _materialCache.key == key)
            {
                material = _materialCache.material;
            }
            else
            {
                _materialCache = MaterialCache.Register(key, () =>
                {
                    var mat   = new Material(m_EffectMaterial);
                    mat.name += "_" + m_NoiseTexture.name;
                    if (isTpImage)
                    {
                        mat.SetTexture("_AlphaTex", _AlphaTex);
                    }
                    mat.SetTexture("_NoiseTex", m_NoiseTexture);
                    return(mat);
                });
                material = _materialCache.material;
            }
        }
Пример #2
0
        /// <summary>
        /// Modifies the material.
        /// </summary>
        public override void ModifyMaterial()
        {
            if (graphic is LImageForTP)
            {
                Texture _AlphaTex = null;
                var     image     = graphic as LImageForTP;
                _AlphaTex = AtlasManager.Instance.GetAtlasInfoBySpriteName(image.m_SpriteName).m_Mat.GetTexture("_AlphaTex");
                string key = _AlphaTex.GetInstanceID().ToString();
                //清理旧的matCache
                if (_materialCache != null && (_materialCache.material == null || _materialCache.key != key || !isActiveAndEnabled || !m_EffectMaterial))
                {
                    MaterialCache.Unregister(_materialCache);
                    _materialCache = null;
                }
                //创建matCache
                if (_materialCache != null && _materialCache.key == key && _materialCache.material != null)
                {
                    material = _materialCache.material;
                }
                else
                {
                    _materialCache = MaterialCache.Register(key, () =>
                    {
                        var mat   = new Material(m_EffectMaterial);
                        mat.name += "_" + _AlphaTex.name;
                        mat.SetTexture("_AlphaTex", _AlphaTex);
                        return(mat);
                    });
                    material = _materialCache.material;
                }
            }
            else
            {
                //清理旧的matCache
                if (_materialCache != null)
                {
                    MaterialCache.Unregister(_materialCache);
                    _materialCache = null;
                }
                material = m_EffectMaterial;
            }

            if (!isActiveAndEnabled || !m_EffectMaterial)
            {
                material = null;
            }
        }
Пример #3
0
 protected override void OnDisable()
 {
     base.OnDisable();
     MaterialCache.Unregister(_materialCache);
     _materialCache = null;
 }