Unity3D-UGUI系列 Button 按钮组件详解

这篇具有很好参考价值的文章主要介绍了Unity3D-UGUI系列 Button 按钮组件详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Button按钮组件介绍
Button是UGUI里面的一个交互UI组件。
也是在开发中经常遇到的一个组件。
通过点击完成一系列的操作:执行某些事件、动作、切换状态等。

在Unity的Hierarchy视图中点击“Create→UI→Button”创建一个Button组件:


三、Button按钮组件属性
Button的属性面板如下图所示:

Image组件我们放到下一节详细讲,重点看一下Button组件。

Button公有三种Transition Setting过渡类型,我们分别介绍:

Color Tint —— 颜色过渡


属性    介绍
Interactable    是否启动按钮的响应
Transition    按钮的过渡动画类型,有Color Tint颜色过渡、Sprite Swap图片过渡、Animation动画过渡
Target Graphic    目标图形
Normal Color    普通状态下的颜色
Highlighted Color    鼠标悬停时状态下的颜色
Pressed Color    点击状态的颜色
Disabled Color    禁用状态的颜色
Color Multiplier    颜色乘数
Fade Duration    效果消失的时间
Navigation    导航类型
OnClick    点击事件列表
颜色过渡类型,通过调整颜色的变化,来展示按钮选中、点击、移开等不同的效果。

Sprite Swap —— 图片过渡

属性    介绍
Interactable    是否启动按钮的响应
Transition    按钮的过渡动画类型,有Color Tint颜色过渡、Sprite Swap图片过渡、Animation动画过渡
Target Graphic    目标图形
Highlighted Sprite    鼠标悬停时状态下的图片
Pressed Sprite    点击状态的图片
Disabled Sprite    禁用状态的图片
Navigation    导航类型
OnClick    点击事件列表
图片过渡类型,通过拖入不同的图片,来展示按钮选中、点击、移开等不同的效果。

Animation —— 动画过渡

属性    介绍
Interactable    是否启动按钮的响应
Transition    按钮的过渡动画类型,有Color Tint颜色过渡、Sprite Swap图片过渡、Animation动画过渡
Target Graphic    目标图形
Normal Trigger    普通状态触发器
Highlighted Trigger    鼠标悬停状态触发器
Pressed Trigger    点击状态触发器
Disabled Trigger    禁用状态触发器
Auto Generate Animation    自动生成动画,点击后可以自动生成Button的动画
Navigation    导航类型
OnClick    点击事件列表
动画过渡类型,通过设置不同的触发器状态,来展示按钮选中、点击、移开等不同的效果。


四、Button按钮组件绑定事件
4-1、可视化创建及事件绑定
点击Button组件上的OnClick的+号

然后把绑定脚本的对象,赋值到这个Button组件上

4-2、通过直接绑定脚本来绑定事件
使用Button组件自带的onClick.AddListener方法
代码

using UnityEngine;
using UnityEngine.UI;

public class ButtonTest : MonoBehaviour
{
    public Button m_Button;
    public Text m_Text;
    void Start()
    {
        m_Button.onClick.AddListener(ButtonOnClickEvent);
    }
    public void ButtonOnClickEvent()
    {
        m_Text.text = "鼠标点击";
    }
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.


4-3、通过射线监听点击到的物体来绑定事件
代码

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class ButtonTest : MonoBehaviour
{
    public Text m_Text;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (OnePointColliderObject() != null)
            {
                if (OnePointColliderObject().name == "Button" || OnePointColliderObject().name == "Text")
                {
                    ButtonOnClickEvent();
                }
            }
        }
    }

    //点击对象获取到对象的名字
    public GameObject OnePointColliderObject()
    {
        //存有鼠标或者触摸数据的对象
        PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
        //当前指针位置
        eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        //射线命中之后的反馈数据
        List<RaycastResult> results = new List<RaycastResult>();
        //投射一条光线并返回所有碰撞
        EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
        //返回点击到的物体
        if (results.Count > 0)
            return results[0].gameObject;
        else
            return null;
    }

    public void ButtonOnClickEvent()
    {
        m_Text.text = "鼠标点击";
    }
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.


4-4、通过 EventTrigger 实现按钮点击事件

编写代码

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

[RequireComponent(typeof(EventTrigger))]
public class ButtonTest : MonoBehaviour
{
    public Text m_Text;

    void Start()
    {
        Button btn = transform.GetComponent<Button>();
        EventTrigger trigger = btn.gameObject.GetComponent<EventTrigger>();
        EventTrigger.Entry entry = new EventTrigger.Entry
        {
            // 鼠标点击事件
            eventID = EventTriggerType.PointerClick,
            // 鼠标进入事件 entry.eventID = EventTriggerType.PointerEnter;
            // 鼠标滑出事件 entry.eventID = EventTriggerType.PointerExit;
            callback = new EventTrigger.TriggerEvent()
        };
        entry.callback.AddListener(ButtonOnClickEvent);
        // entry.callback.AddListener (OnMouseEnter);
        trigger.triggers.Add(entry);
    }

    public void ButtonOnClickEvent(BaseEventData pointData)
    {
        m_Text.text = "鼠标点击";
    }
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.


4-5、通过通用类 UIEventListener 来处理Button响应事件
UIEventListener.cs

using UnityEngine;
using UnityEngine.EventSystems;

public class UIEventListener : MonoBehaviour, IPointerClickHandler
{
    // 定义事件代理
    public delegate void UIEventProxy();
    // 鼠标点击事件
    public event UIEventProxy OnClick;

    public void OnPointerClick(PointerEventData eventData)
    {
        if (OnClick != null)
            OnClick();
    }
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
ButtonTest.cs

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

[RequireComponent(typeof(EventTrigger))]
public class ButtonTest : MonoBehaviour
{
    public Text m_Text;

    void Start()
    {
        Button btn = this.GetComponent<Button>();
        UIEventListener btnListener = btn.gameObject.AddComponent<UIEventListener>();

        btnListener.OnClick += delegate () {
            ButtonOnClickEvent();
        };
    }

    public void ButtonOnClickEvent()
    {
        m_Text.text = "鼠标点击";
    }
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.


五、Button组件常见问题解析
5-1、Button点击没效果
无论怎么点击Button,都没有效果:

这个可能是因为层级原因,其他的UI挡住了Button:

可以看到Text的框挡住了Button,将Text 的框不挡住Button,或者Button调整到最下面即可解决问题:

5-2、Button点击不响应
这个问题跟第一个问题很想,但是有一点不一样,这个是点击有效果,但是不响应:

这个不响应的问题,很有可能是代码的注册时间没有被执行,先检查按钮上的 OnClick是否绑定事件了(如果有的话):

然后检查代码是否获取到了Button,然后是否执行了代码:

登录后复制 
using UnityEngine;
using UnityEngine.UI;

public class ButtonTest : MonoBehaviour
{
    public Button m_Button;
    public Text m_Text;
    void Start()
    {
        m_Button.onClick.AddListener(ButtonOnClickEvent);
    }
    public void ButtonOnClickEvent()
    {
        m_Text.text = "鼠标点击";
    }
}
 文章来源地址https://www.toymoban.com/news/detail-410683.html

到了这里,关于Unity3D-UGUI系列 Button 按钮组件详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity UGUI之Button按钮点击事件

    组件基本知识:Unity UGUI之Button控件的简单认识-CSDN博客 按钮添加点击事件虽然比较简单,但是使用不同的方法灵活应用开发起来效率会更高。 1、当我们控制Unity一些组件的事件是组件本身自带的,那么我们就可以考虑直接通过Button的On Click()中“+”按钮,添加一个新事件,然

    2024年02月05日
    浏览(55)
  • 【Unity3D】button组件无法使用onclick与image组件无法改变属性(如fillAmount等)的解决办法

    如果你遇到了:    AssetsScriptsGame.cs(37,16): error CS0079: The event \\\'Button.onClick\\\' can only appear on the left hand side of += or -= ArgumentException: GetComponent requires that the requested component \\\'Button\\\' derives from MonoBehaviour or Component or is an interface. UnityEngine.GameObject.GetComponent[T] () 检查一下编译器是否给你

    2024年02月15日
    浏览(53)
  • Unity UGUI的Button组件的介绍及使用

    UGUI(Unity GUI)是Unity引擎中的一套用户界面系统,Button(按钮)是其中的一个常用组件。Button组件可以用于创建可交互的按钮,用户点击按钮时可以触发相应的事件。 Button组件通过检测用户的点击事件来触发相应的操作。当用户点击按钮时,Button组件会检测到点击事件,并执

    2024年02月12日
    浏览(175)
  • 【Unity3D】UGUI之Slider

    1 Slider属性面板         在 Hierarchy 窗口右键,选择 UI 列表里的 Slider 控件,即可创建 Slider 控件,选中创建的 Slider 控件,按键盘【T】键,可以调整 Slider 控件的大小和位置。         创建 Slider 控件时,系统会自动为其创建 3 个 Image 子控件和 2 个 Empty 控件,如下: Backgr

    2024年02月01日
    浏览(49)
  • Unity3D学习之UI系统——UGUI

    3.2.1 Screen Space -Overlay 覆盖模式 3.2.2 Screen Space - Camera 摄像机模式 创建专门的摄像机渲染UI 并让主摄像机不渲染UI层 3.2.3 World Space 宽高 * 缩放系数 = UI界面大小 参考分辨率 图片格式要改为Sprite 恒定像素模式计算公式 会根据当前分辨率 和 参考分辨率的比率自动计算UI的缩放量

    2024年02月21日
    浏览(261)
  • Unity实用功能之UGUI的Text实现颜色渐变详解 Unity3D

    在Unity3D中,UGUI是一种用于创建用户界面的强大工具。其中的Text组件用于显示文本内容,而通过实现颜色渐变效果,可以使文本更加生动和吸引人。本文将详细介绍如何在Unity中使用UGUI的Text组件实现颜色渐变效果,并提供相应的源代码。 首先,我们需要创建一个空的GameObj

    2024年02月02日
    浏览(57)
  • 解决Unity3D打包到PC端,UGUI的格式错乱问题

    Tips:在UI界面开始设计之前,一定先要设置好各项UI元素的参照位置,以及参考的屏幕分辨率比例,不然你精心设计好的UI界面在别人电脑上一看,直接堆在了一起或者根本显示不全,后面再改会很麻烦。 前言:本文主要分两部分,主讲第一部分。并不是第二部分不重要,而

    2024年02月07日
    浏览(52)
  • 【虚拟仿真】Unity3D中实现3DUI,并且实现Button、InputField、Toggle等事件绑定

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 最近在项目中需要用到3DUI的展示,之前一般会用TextMeshPro进行展示: 但是,后面又需要添加按钮、Toggle等,就捣鼓了

    2024年02月22日
    浏览(68)
  • 【Unity3D】Unity按钮点击无反应,可能是因为层级关系

    对Unity的Hierarchy面板上的UI物体,层级在越下面的越后渲染,即越层级下面的会遮挡住层级上面的物体。 所以看看是不是按钮被一些透明的东西盖住了? 如果不是这个原因,按钮按不动的其他原因可以参考:Unity的按钮不响应点击 附: 使用脚本动态调整层级顺序: 在Transfo

    2024年02月11日
    浏览(61)
  • UGUI交互组件Button

    从菜单中创建Button对象,Button的文本由子节点Text对象显示,Button对象的组件除了基础组件外,还有Image用来显示Button常规态的图片,还有Button组件用来控制点击过渡效果和点击事件的响应。 属性名称 属性说明 Interactable 决定Button是否接受输入,未勾选时交互被禁用,Button显示

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包