Unity长按Button,显示消息盒子

Button 的长按有很多种,我这里只是写了一种实现方式,通过绑定EventTrigger 来实现的..

Button上的脚本以及,组件添加如下图..

代码如下:

/*********************************************
 *
 *   Title: 
 *
 *   Description: 
 *
 *   Author: jin
 *
 *   Date: 
 *
 *   Modify: 
 * 
 *********************************************/
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ButtonInfo : MonoBehaviour
{
    /// <summary>
    /// 点击时间
    /// </summary>
    private float clickTime = 0f;
    /// <summary>
    /// 长按时间
    /// </summary>
    private float clickTimeInterval = .3f;
    /// <summary>
    /// 是否点击
    /// </summary>
    private bool isClick = false;
    /// <summary>
    /// 字体是否显示
    /// </summary>
    private bool infoBoxIsShow = false;
    /// <summary>
    /// 字体控件
    /// </summary>
    public Text infoBoxObj;
    private void Start()
    {
        //点击事件赋初值
        EventTriggerListener.Get(gameObject).onUp += OnClickUp;
        EventTriggerListener.Get(gameObject).onDown += OnClickDown;
    }
    private void Update()
    {
        //点击的时候记录时间
        if (isClick)
        {
            clickTime += Time.deltaTime;
        }
        //如果 该物体没有显示,且超过长按的时间,那么就显示字体
        if (clickTime > clickTimeInterval && !infoBoxIsShow)
        {
            SetInBox(this.name);
        }
    }
    /// <summary>
    /// 点击抬起
    /// </summary>
    /// <param name="go">Go.</param>
    private void OnClickUp(GameObject go)
    {
        //短按触发其他逻辑
        if (clickTime < clickTimeInterval)
        {

        }
        //抬起的时候,将所有变量置为初始值
        isClick = false;
        clickTime = 0;
        infoBoxIsShow = false;
        infoBoxObj.gameObject.SetActive(infoBoxIsShow);
    }
    /// <summary>
    /// 按下
    /// </summary>
    /// <param name="go">Go.</param>
    private void OnClickDown(GameObject go)
    {
        clickTime = 0;
        isClick = true;
    }
    /// <summary>
    /// 显示字体 设置显示的位置
    /// </summary>
    /// <param name="str">String.</param>
    void SetInBox(string str)
    {
        infoBoxIsShow = true;
        infoBoxObj.gameObject.SetActive(infoBoxIsShow);
        infoBoxObj.transform.SetParent(transform);
        infoBoxObj.transform.localPosition = new Vector3(0, 90, 0);
        infoBoxObj.text = str;
    }
}
View Code

这个时候长按,就能看到效果了..

 

转载于:https://www.cnblogs.com/bw1219/p/10784439.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值