unity 按钮 两态处理,简单脚本实现

两态按钮粗略找了下没找到,想想原理也不复杂,就简单写了个,写的不好,各位见谅!

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();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值