233 lines
7.3 KiB
C#
Raw Normal View History

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))]
2021-04-15 15:57:29 +08:00
public class PfUIButton : PFUIComponentBase
{
public enum Type
{
Normal,
Border,
Primary
}
[SerializeField] Type mType;
private Image image;
2021-04-14 15:02:33 +08:00
public Text text;
private Texture2D cursor;
private Outline outline;
2021-04-14 15:02:33 +08:00
protected void Awake()
{
outline = this.GetComponent<Outline>();
if (mType == Type.Border && outline == null)
{
outline = this.gameObject.AddComponent<Outline>();
outline.effectDistance = new Vector2(2, 2);
}
//设置光标
cursor = Resources.Load<Texture2D>("Images/PointerButtonHover");
image = gameObject.GetComponent<Image>();
text = this.transform.Find("Text").GetComponent<Text>();
Material material = null;
if (material == null)
{
material = Instantiate(Resources.Load<Material>("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;
2021-04-14 15:02:33 +08:00
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<UnityEngine.EventSystems.BaseEventData>(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<UnityEngine.EventSystems.BaseEventData>(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<BaseEventData>(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<BaseEventData>(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()
{
}
}
}