两态按钮粗略找了下没找到,想想原理也不复杂,就简单写了个,写的不好,各位见谅!
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
[RequireComponent(typeof(Image))]
public class UIPressAndUpComp : UIBehaviour, IPointerClickHandler
{
public enum UIState
{
E_UP,
E_PRESS,
}
public Sprite upState;
public Sprite pressState;
public UnityEvent onClickPress = new UnityEvent();
public UnityEvent onClickUp = new UnityEvent();
private float m_fDurationTime = 0.2f;
private bool m_bTimer = false;
private UIState m_nState = UIState.E_UP;
private Image m_Image;
void Start()
{
m_Image = transform.GetComponent<Image>();
}
private void Update()
{
// 简单计时器,防止误点双击
if (m_bTimer)
{
m_fDurationTime -= Time.deltaTime;
if (m_fDurationTime <= 0)
{
m_fDurationTime = 0.2f;
m_bTimer = false;
}
}
}
public void OnPointerClick(PointerEventData eventData)
{
if (m_bTimer)
return;
m_bTimer = true;
if (m_nState == UIState.E_UP)
SetStatePress();
else if (m_nState == UIState.E_PRESS)
SetStateUp();
}
public void InitState()
{
if (m_nState != UIState.E_UP)
{
m_nState = UIState.E_UP;
// 换第二态图
m_Image.sprite = upState;
onClickUp.Invoke();
m_bTimer = true;
}
}
private void SetStateUp()
{
m_nState = UIState.E_UP;
// 换第二态图
m_Image.sprite = upState;
onClickUp.Invoke();
}
private void SetStatePress()
{
m_nState = UIState.E_PRESS;
// 换第一态图
m_Image.sprite = pressState;
onClickPress.Invoke();
}
}