using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; namespace Assets.Scripts.UI.Control { [RequireComponent(typeof(Button))] public class PFUIButton : PFUIComponentBase { public enum Type { Normal, Border, Primary } [SerializeField] Type mType; private Image image; public Text text; private Texture2D cursor; private Outline outline; protected void Awake() { outline = this.GetComponent(); if (mType == Type.Border && outline == null) { outline = this.gameObject.AddComponent(); outline.effectDistance = new Vector2(2, 2); } //设置光标 cursor = Resources.Load("Images/PointerButtonHover"); image = gameObject.GetComponent(); text = this.transform.Find("Text").GetComponent(); Material material = null; if (material == null) { material = Instantiate(Resources.Load("UI/Material/RoundedCornersTextureMaterial")); } var rect = ((RectTransform)transform).rect; material.SetVector(Shader.PropertyToID("_WidthHeightRadius"), new Vector4(rect.width, rect.height, rect.height*0.5f, 0)); image.material = material; InitColor(); BindEvent(); } private void InitColor() { text.color = Color.white; switch (mType) { case Type.Normal: { image.color = ConvertColor("#353543"); } break; case Type.Border: { outline.enabled = true; outline.effectColor = ConvertColor("#474759"); image.color = ConvertColor("#3D3E4D"); } break; case Type.Primary: { image.color = ConvertColor("#F93086"); } break; default: break; } } private void BindEvent() { //鼠标进入 UIManager.AddEvent(this.gameObject, EventTriggerType.PointerEnter, new UnityEngine.Events.UnityAction(e => { if (!this.isActiveAndEnabled) return; Cursor.SetCursor(cursor, Vector2.zero, CursorMode.Auto); switch (mType) { case Type.Normal: { image.color = ConvertColor("#5C5C6E"); } break; case Type.Border: { outline.effectColor = Color.white; } break; case Type.Primary: { image.color = ConvertColor("#FF528A"); } break; default: break; } })); //鼠标离开 UIManager.AddEvent(this.gameObject, EventTriggerType.PointerExit, new UnityEngine.Events.UnityAction(e => { if (!this.isActiveAndEnabled) return; Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); switch (mType) { case Type.Normal: { image.color = ConvertColor("#353543"); } break; case Type.Border: { outline.effectColor = ConvertColor("#474759"); } break; case Type.Primary: { image.color = ConvertColor("#F93086"); } break; default: break; } })); //按下 UIManager.AddEvent(this.gameObject, EventTriggerType.PointerDown, new UnityEngine.Events.UnityAction(e => { if (!this.isActiveAndEnabled) return; switch (mType) { case Type.Normal: { image.color = ConvertColor("#23232D"); } break; case Type.Border: { outline.effectColor = ConvertColor("#353543"); text.color = ConvertColor("#414251"); image.color = ConvertColor("#23232D"); } break; case Type.Primary: { image.color = ConvertColor("#BD2255"); } break; default: break; } })); //松开 UIManager.AddEvent(this.gameObject, EventTriggerType.PointerUp, new UnityEngine.Events.UnityAction(e => { if (!this.isActiveAndEnabled) return; Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); switch (mType) { case Type.Normal: { image.color = ConvertColor("#5C5C6E"); } break; case Type.Border: { outline.effectColor = Color.white; text.color = Color.white; } break; case Type.Primary: { image.color = ConvertColor("#FF528A"); } break; default: break; } })); } public void SetEnabled(bool value) { base.enabled = value; if (base.enabled) { InitColor(); } else { text.color = ConvertColor("#353543"); if (outline != null) { outline.enabled = false; } image.color = ConvertColor("#414251"); } } private Color ConvertColor(string colorStr) { ColorUtility.TryParseHtmlString(colorStr, out Color color); return color; } private void OnDestroy() { } } }