UGUI怎么动态的添加按钮的OnClick点击事件

UGUI怎么动态的添加按钮的OnClick点击事件,第1张

1、如果你问按钮里,四个桢,点击按钮那一桢用来干吗的,那么点击按钮桢就是在你点的时候表现出来的动画。

2、如果你问按钮是起什么作用的,那么它用来在发生按钮动作时命令MC做一些事情,比如跳转,加载,链接网页等等。

参考

Unity 3D UGUI Toggle用法教程

Is On :用来表示Toggle当前开关状态,勾选为开;

Graphic :控制Toggle组件开关图片的显示隐藏,默认选取Checkmark,就是那个勾勾图片

挂上这个脚本,会发现事件中有一个带参数的,还有一个不带参数的:

虽然ListenInFunction是带参数的,但是却要选上面那个绿色不带参数的,刚开始我是懵逼的…………

参照 UGUI中Button和Toggle 添加动态事件 得到了解释:

选下方红色的静态方法,其实UI中会多出一个checkbox,可以指定传入的参数:

当然也可以传入其它类型,比如

参考

Unity UGUI入门组件整理(三)【Toggle组件与Toggle Group组件】

假如初始状态是Toggle3被勾选,当我点击Toggle1勾选时,打印如下:

这样就可以根据名字和选中状态来做逻辑处理了。

是否允许不打开任何开关?如果启用此设置,则按下当前打开的开关会将其关闭,因此没有任何开关处于打开状态。如果禁用此设置,则按下当前打开的开关将不改变该开关的状态。

这个说的有点绕,并且有些博客上还有种错误的说法,就是这个开关能允许Group多选。其实测试一下就知道了,在勾选Allow Switch off时,点击当前选中的Toggle,可以将当前Toggle改成未选择状态,此时整个Group中所有的Toggle都会处于未选择状态。而如果没勾选Allow Switch off,就达不到这个效果,会强迫你必须选一个。

在官方文档中,描述ToggleGroup叫开关组:

UGUI学习笔记(五) ToggleGroup制作选择题单选框

UGUI的鼠标事件:EventTrigger

自己写一个帮助类,便于调用(用回调,对相应鼠标事件添加事件,方便书写)

using System.Collections

using System.Collections.Generic

using UnityEngine

using UnityEngine.EventSystems

/// <summary>

/// 鼠标事件监听

/// </summary>

public class UIEventListener :  EventTrigger

{

    public delegate void PointerEventDelegate(PointerEventData eventData)

    public PointerEventDelegate PointerEnterEvent

    public PointerEventDelegate PointerExitEvent

    public PointerEventDelegate PointerClickEvent

    public PointerEventDelegate PointerDownEvent

    public PointerEventDelegate PointerUpEvent

    public PointerEventDelegate BeginDragEvent

    public PointerEventDelegate OnDragEvent

    public PointerEventDelegate EndDragEvent

    public static UIEventListener GetEventListener(GameObject item)

    {

        UIEventListener uIEvent = null

        if (item != null)

        {

            uIEvent = item.AddComponent<UIEventListener>()

        }

        return uIEvent

    }

    /// <summary>

    /// 鼠标划入

    /// </summary>

    /// <param name="eventData"></param>

    public override void OnPointerEnter(PointerEventData eventData)

    {

        base.OnPointerEnter(eventData)

        PointerEnterEvent?.Invoke(eventData)

    }

    /// <summary>

    /// 鼠标移出

    /// </summary>

    /// <param name="eventData"></param>

    public override void OnPointerExit(PointerEventData eventData)

    {

        base.OnPointerExit(eventData)

        PointerExitEvent?.Invoke(eventData)

    }

    /// <summary>

    /// 鼠标点击

    /// </summary>

    /// <param name="eventData"></param>

    public override void OnPointerClick(PointerEventData eventData)

    {

        base.OnPointerClick(eventData)

        PointerClickEvent?.Invoke(eventData)

    }

    /// <summary>

    /// 鼠标抬起

    /// </summary>

    /// <param name="eventData"></param>

    public override void OnPointerDown(PointerEventData eventData)

    {

        base.OnPointerDown(eventData)

        PointerDownEvent?.Invoke(eventData)

    }

    /// <summary>

    /// 鼠标抬起

    /// </summary>

    /// <param name="eventData"></param>

    public override void OnPointerUp(PointerEventData eventData)

    {

        base.OnPointerUp(eventData)

        PointerUpEvent?.Invoke(eventData)

    }

    /// <summary>

    /// 开始拖拽

    /// </summary>

    /// <param name="eventData"></param>

    public override void OnBeginDrag(PointerEventData eventData)

    {

        base.OnBeginDrag(eventData)

        BeginDragEvent?.Invoke(eventData)

    }

    /// <summary>

    /// 拖拽中

    /// </summary>

    /// <param name="eventData"></param>

    public override void OnDrag(PointerEventData eventData)

    {

        base.OnDrag(eventData)

        OnDragEvent?.Invoke(eventData)

    }

    /// <summary>

    /// 拖拽结束

    /// </summary>

    /// <param name="eventData"></param>

    public override void OnEndDrag(PointerEventData eventData)

    {

        base.OnEndDrag(eventData)

        EndDragEvent?.Invoke(eventData)

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11877431.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存