/// <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; } }
/// <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; } }
protected override void OnDisable() { base.OnDisable(); MaterialCache.Unregister(_materialCache); _materialCache = null; }