Unity3D---UGUI---Button相关、点击、按下、抬起、长按事件

一、先介绍一下Inspector面板里的东西

Button里一共有两个脚本。

Image(Script)

  • 这个跟Image里是一样的

Button(Script)

  • Interactable(交互):Button是否可以点击的开关,关闭进入Disabled状态

  • Transition(变化):设置Button按下,弹起,不可用的显示状态

1.None(空):不管怎么样都只使用Image(Script)里设置的图片的

2.Color Tint(着色):在Image(Script)里设置的图片基础上进行着色

  • Target Graphic(目标图形):可选择任意Graphic对象进行着色
  • Normal Color(正常状态颜色)
  • Highlighted Color(突出状态颜色):鼠标悬停或者选择状态的颜色
  • Pressed Color(按下状态颜色)
  • Disabled Color(不可用状态颜色)
  • Color Multiplier(增加颜色):这个不知道有什么用,emmmm 保持默认就好了
  • Fade Duration(消失时间):其实就是着色时间与褪色时间

3.Sprite Swap(图片切换):选项跟Color Tint中的相似,区别在于设置的是图片

4.Animation(执行动画)

  • Navigation(导航):选中该按钮后可以用方向键比如WASD以及上下左右按键选择其他按钮,前提是导航目标按钮也开启了导航功能,可通过回车或者空格点击按钮响应点击事件

1.None(关闭)

2.Horizontal(水平导航):左右能导航到按钮

3.Automatic(自动导航):上下左右按键都能导航到按钮

4.Vertical(垂直导航):上下能导航到按钮

5.Explicit(指定导航):指定上下左右按键能导航到那个按钮上

  • Visualize(可视化):把按键能够导航到的路径可视化,高亮的黄色箭头为当前按钮可导航到的目标(目前只看到该可视化,可能还有其他?)

二、Button点击事件

点击事件很简单,直接在Button里能找到一个On Click()的地方,选择Editor And Runtime。

然后选择组件


然后选择执行该控件的脚本函数,像显示隐藏就直接GameObject>>SetActive(bool)

如果该函数需要传参,在下面会需要填写参数,比如我选择的是GameObject>>SetActive(bool),则需传送bool值,空为false,√为true。之后点击该按钮就能隐藏BackImage这个控件了。控制其他得也同理。

三、Button按下、抬起、长按事件

按下事件对于游戏开发来说很重要,之前工作开发项目是MMORPG游戏,像攻击类的按键,都是通过按下来触发
与其说是Button长按,不如说是所有能接受事件的所有控件的长按都可以这么实现。
点击Button,然后看到该Button的Inspector然后点击AddComponent >> Event >> Event Trigger。或者可以直接上面搜索框搜索。

之后能看到Event Trigger组件,然后点击里面的Add New Event Type >> PointerDown,再添加PointerUp,现在估计有人知道我为什么把按下,抬起,长按放在一起了,长按是通过PointerDow(按下)、PointerUp(抬起)实现的

创建一个脚本,代码贴在下面

using UnityEngine;
public class ChangAn : MonoBehaviour 
{
    public float Ping;
    private bool IsStart = false;
    private float LastTime = 0;
    void Update () {
        if (IsStart && Ping > 0 && LastTime > 0 && Time.time - LastTime > Ping)
        {
            Debug.Log("长按触发");
            IsStart = false;
            LastTime = 0;
        }
    }
    public void LongPress(bool bStart)
    {
        IsStart = bStart;
        if(IsStart)
        {
            LastTime = Time.time;
            Debug.Log("长按开始");
        }
        else if(LastTime != 0)
        {
            LastTime = 0;
            Debug.Log("长按取消");
        }    
    }
}

然后把写好的脚本文件拖到你想设置长按功能的控件里,然后设置好,Down传True,Up传false,Ping传3,长按3秒触发长按

Unity3D的C# API文档中还有有很多其他得函数,目前我知道的觉得能使用到的函数就整理出来了下面几个,进入按钮离开按钮在PC的某些游戏会用到,鼠标悬停在按钮上的话出现一些小提示,离开这些小提示又会消失,通过这连个函数能够实现

using UnityEngine;
using UnityEngine.EventSystems;

public class OnImage : EventTrigger
{
    public override void OnPointerDown(PointerEventData eventData)
    {
        base.OnPointerDown(eventData);
        Debug.Log("按下" + this.gameObject.name);
    }
    public override void OnPointerUp(PointerEventData eventData)
    {
        base.OnPointerUp(eventData);
        Debug.Log("抬起" + this.gameObject.name);
    }
    public override void OnPointerExit(PointerEventData eventData)
    {
        base.OnPointerExit(eventData);
        Debug.Log("离开" + this.gameObject.name);
    }
    public override void OnPointerEnter(PointerEventData eventData)
    {
        base.OnPointerEnter(eventData);
        Debug.Log("进入" + this.gameObject.name);
    }
}

这段时间通过学习,更新一下用来实现Button相关、点击、按下、抬起、长按事件,原理还是差不多,只是调用的方法变了
代码如下

using UnityEngine;
using UnityEngine.EventSystems;

public class OnImage : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IPointerExitHandler,IPointerEnterHandler
{
    public float Ping;
    private bool IsStart = false;
    private float LastTime = 0;

    void Update()
    {
        if (IsStart && Time.time - LastTime > Ping)
        {
            IsStart = false;
            Debug.Log("长按");
        }
    }
    public void OnPointerDown(PointerEventData eventData)
    {
        LongPress(true);
        Debug.Log("按下");
    }
    public void OnPointerUp(PointerEventData eventData)
    {
        if(IsStart)
        {
            LongPress(false);
            Debug.Log("抬起");
        }      
    }
    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("离开");
    }
    public void OnPointerEnter(PointerEventData eventData)
    {
        Debug.Log("进入");
    }
    public void LongPress(bool bStart)
    {
        IsStart = bStart;
        LastTime = Time.time;
    }
}

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity-UGUIUnity游戏引擎中的一个UI系统,可以用来创建和管理用户界面。它提供了丰富的功能和工具,使得开发者能够轻松地制作各种表格。 使用Unity-UGUI制作表格的步骤如下: 1. 创建Canvas对象:在Unity中,首先需要创建一个Canvas对象,作为UI渲染的容器。选择GameObject -> UI -> Canvas,即可创建一个Canvas对象。 2. 添加Table组件:选择Canvas对象,在Inspector面板中点击"Add Component"按钮,然后在搜索栏中输入"Table",选择适合的Table组件,点击添加。 3. 设置表格的行列数:在Table组件的Inspector面板中,设置表格所需的行数和列数。 4. 设置表格样式:可以在Inspector面板中设置表格的颜色、大小等属性,以满足具体需求。 5. 添加表格内容:可以通过代码或者拖拽方式,向表格中添加所需的文本或图片。可以通过操作表格的行列索引,将内容放置在特定的位置。 6. 设置表格的交互性:可以为表格中的每个单元格添加点击事件或其他交互效果,提升用户体验。 7. 调整表格布局:可以通过调整Canvas的大小、位置,或者改变组件之间的层次关系,来调整表格的布局。 8. 完善表格功能:可以根据具体需求,添加更多表格的功能,比如排序、过滤、搜索等。 9. 测试和优化:在表格制作完成后,可以进行测试,查看表格的显示效果和交互效果,并进行优化。 总之,使用Unity-UGUI制作表格,只需简单的操作和设置,就能够创建出各种样式、功能丰富的表格,满足游戏或应用程序的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值