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

一、如何使用Button调用事件

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

(1)方法要 public出去;
(2)方法似乎最多只能带一个参,暂时没找到解决方法;
(3) IEnumerator协程接口不可直接调用(但是可以把 StartCoroutine放在调用的方法里)。
【U3D】关于 UGUI按钮:Button 以及事件:EventTrigger 的一些经验教训_第1张图片 【U3D】关于 UGUI按钮:Button 以及事件:EventTrigger 的一些经验教训_第2张图片
 

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   btnAction1 btnAction2 ;
    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"状态;
          Des elect:指针在 目标 范围外 完成第一次点击后, 目标 变为"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"键)时触发;
 

你可能感兴趣的:(UI,笔记)