using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; namespace BF { [RequireComponent(typeof(MaskableGraphic))] [DisallowMultipleComponent] [ExecuteInEditMode] public class UIDynamicBrightEffect : BaseMeshEffect { [SerializeField] [Range(0, 3)] float brightness = 1.0f; public float Brightness { get { return brightness; } set { brightness = value; SetDirty(); } } public bool Brighting { get { return Math.Abs(brightness - 1.0f) > 0 && IsActive(); } } public Material effectmat; static List Vertexs = new List(); const string SHADER_NAME = "BF/UI/UIDynamicBright"; protected override void OnEnable() { if (effectmat == null) { var shader = Shader.Find(SHADER_NAME); effectmat = new Material(shader); } graphic.material = effectmat; } protected override void OnDisable() { graphic.material = BFMain.Instance.RenderMgr.UIDefaultMat; } public override void ModifyMesh(VertexHelper vh) { if (!IsActive()) { return; } vh.GetUIVertexStream(Vertexs); vh.Clear(); for (int i = 0; i < Vertexs.Count; i++) { UIVertex vertex = new UIVertex(); vertex.color = Vertexs[i].color; vertex.position = Vertexs[i].position; vertex.uv0 = Vertexs[i].uv0; vertex.uv2 = new Vector2(brightness, 0f); Vertexs[i] = vertex; } vh.AddUIVertexTriangleStream(Vertexs); Vertexs.Clear(); } public void SetMarterial(Material material) { effectmat = material; } public void SetBright(float brightness = 1.25f) { Brightness = Math.Max(0f, brightness); } void SetDirty() { if (graphic) { graphic.SetVerticesDirty(); } } } }