【U3D】关于 UGUI按钮:Button 以及事件:EventTrigger 的一些经验教训

本文详细介绍了Unity中Button组件的事件处理方式,包括通过Inspector面板配置事件、使用脚本监听Click事件以及EventTrigger的高级应用等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、如何使用Button调用事件

1.在Button附件里的OnClick()栏点击"+"号,然后将要调用的事件方法所在脚本拖进去,选择对应方法,其中:

(1)方法要public出去;
(2)方法似乎最多只能带一个参,暂时没找到解决方法;
(3)IEnumerator协程接口不可直接调用(但是可以把StartCoroutine放在调用的方法里)。
 

2. 脚本控制监听Click事件

 //记得引用UI
 using UnityEngine.UI;
 
 public Button button;
 //将目标Button拖到GameObject上
    void Start()
    {
          //如果是预制体身上的Button,就用GameObject.Find吧
         button.onClick.AddListener(delegate
            {
                Debug.Log("我被点了一下");
            });   
    }
 
注意:
 1.这个 AddListener 每次调用都会添加一个监听,不能放在UpDate里;
 2.如果脚本是 DontDestroyOnLoad 的,记得在 AddListener 之前加上 button.onClick.RemoveAllListeners();
 3.如果不想清空按钮所有事件(虽然很少这么做),你可以用 button.onClick.RemoveListener(btnAction);来移除指定事件;其中 btnAction是 UnityAction 型的,下面是示例代码:
 
 //记得引用Events
 using UnityEngine.Events;
 //委托UnityAction
 UnityAction btnAction1btnAction2;
    void Awake()
    {
        //委托事件1
        btnAction1 = delegate
        {
            ClickOne();
        };
        //委托事件2
        btnAction2 = delegate
        {
            ClickTwo();
        };
        //添加监听
        AddBtnListener();
    }
    void AddBtnListener()
    {
        btn.onClick.AddListener(btnAction1);
        btn.onClick.AddListener(btnAction2);
    }
    void ClickOne()
    {
        Debug.Log("1");
    }
    void ClickTwo()
    {
        Debug.Log("2");
        //按下Button后去除第一个监听,之后就只会打印"2"
        btn.onClick.RemoveListener(btnAction1);
    }

3.使用EventTrigger中的AddNewEventType添加事件,监听分解动作,其中

 除了1中需要注意的事项,还需注意:
(1)各种Event触发的机理与时机:
         ①PointerEnter:指针(鼠标、手指等)进入目标(Button、Panel等)范围的瞬间;
         ②PointerExit:指针离开目标范围的瞬间;
         ③PointerDown:指针在目标范围内时:按下的瞬间;
         ④PointerUp:指针在目标范围内时:指针抬起的瞬间:即使指针抬起的瞬间不在目标范围内,也会触发
         ⑤PointerClick:指针对目标完成一次点击的瞬间:如果指针抬起的瞬间不在目标范围内,便不会触发;PointerUp之后执行;
         ⑥Drag:指针按住并移动时:如果按下不移动则不触发;即使拖动时指针不在目标范围内也会触发
         ⑦Drop:(理解为有其他东西被扔到监听对象身上时触发)在指针抬起的瞬间:如果被拖拽目标A此时在另一目标B的范围内,并且目标B有对Drop的监听(目标A不需要,但需要能够Drag),则触发;否则不会触发;在PointerUp之后执行;
         ⑧Scroll:指针在目标范围内时:无论指针是否按下,滚动滚轮时触发
         ⑨UpdateSelected:指针完成一次PointerClick后,每一帧都会执行一次对应事件(下文的Select只在最开始执行一次)
         ⑩Select:指针在目标范围内完成第一次点击后,目标变为"Select"状态;
         Deselect:指针在目标范围外完成第一次点击后,目标变为"Deselect"状态;
         ⑫Move:任意目标处于"Select"状态下时:通过『上』『下』『左』『右』键,或"W", "S", "A", "D" 等键改变了Axis轴的Value时触发(可用Input.GetAxis("AxisName")检测);
         InitializePotentialDrag:指针在目标范围内按下时:初始化潜在的可拖动目标,在PointerDown后,BeginDrag前触发;
         ⑭BeginDrag:指针在目标范围内按下时:一旦移动便触发;即使拖动时指针不在目标范围内也会触发
         EndDrag:指针在移动时抬起的瞬间:即使指针不在目标范围内也会触发;如果触发了Drop则在其之后触发
         ⑯Submit:目标处于"Select"状态下时点击"Submit"键(默认为"Enter"键)时触发;
         Cancel:目标处于"Select"状态下时点击"Cancel"键(默认为"ESC"键)时触发;
 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值