EventTrigger 事件触发器

Posted Go_Accepted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EventTrigger 事件触发器相关的知识,希望对你有一定的参考价值。

1、EventTrigger 事件触发器是什么

一个EventTrigger组件,是一个集成了所有UI事件监听接口的脚本,可以让我们更方便地为控件添加事件监听

2、如何使用事件触发器

在对象的Inpector窗口中->Add Component->Event Trigger->Add New Event Type,选择响应类型

在实际应用场景上,我们为了更好地管理UI的逻辑,通常会在一个Panel中添加UI组件,通过Panel关联的脚本对其中的UI对象进行逻辑处理,而事件监听接口需要将脚本直接和相应的UI关联,如果按照常规操作,那么Panel脚本就没办法对UI对象的逻辑进行管理,这是不太方便的,因此在进行事件监听时,通常是在监听脚本中声明对应的委托/事件,并在事件监听函数中调用委托/事件,而再Panel脚本中则可以通过应用情况对监听脚本中的委托/事件添加逻辑代码,从而实现较好地管理,比如,一个长按的事件监听脚本:

/// <summary>
/// 长按按钮脚本,提供两个Event给外部,让外部去处理对应的逻辑
/// </summary>
public class LongPress : MonoBehaviour, IPointerDownHandler, IPointerUpHandler 
    public event UnityAction upEvent;
    public event UnityAction downEvent;

    public void OnPointerDown(PointerEventData eventData) 
        downEvent?.Invoke();
    

    public void OnPointerUp(PointerEventData eventData) 
        upEvent?.Invoke();
    

而在Panel脚本中:

public class GamePanel : MonoBehaviour 
    // 关联长按功能按钮
    public LongPress longPress;

    void Start() 
        longPress.downEvent += BtnDown;
        longPress.upEvent += BtnUp;
    
   
    private void BtnUp() 
        // 鼠标抬起的逻辑代码
    

    private void BtnDown() 
        // 鼠标按下的逻辑代码
        

那么在对UI对象上抬起和按下时,就会执行Panel脚本中实现的逻辑代码,这也差不多是事件触发器的原理


(1)拖曳脚本进行关联

参数为BaseEventData

public void TestPointEnter(BaseEventData data) 
        PointerEventData eventData = data as PointerEventData;
        print("鼠标进入 " + eventData.position);

步骤与之前的类似


(2)代码添加

EventTrigger中管理监听的是一个triggers列表,triggers 其实是一个Entry类型的List,其中Entry有响应事件的id枚举与对应的callback函数,通过将这些信息添加到这个List,就可以实现监听的功能

public class Lesson : MonoBehaviour 
    // 将相应UI对象的触发器进行关联
    public EventTrigger et;

    private void Start() 
        // 声明一个需要监听的事件对象,
        EventTrigger.Entry entry = new EventTrigger.Entry();
        // 声明事件的类型
        entry.eventID = EventTriggerType.PointerUp;
        // 监听函数关联
        entry.callback.AddListener((data) => 
            print("代码监听:抬起");
        );
        // 把声明好的事件对象加入到EventTrigger中
        et.triggers.Add(entry);

        // 每次添加新的监听类型都需要new一个新对象
        entry = new EventTrigger.Entry();
        // 声明事件的类型
        entry.eventID = EventTriggerType.PointerExit;
        // 监听函数关联
        entry.callback.AddListener((data) => 
            print("代码监听:离开");
        );
        // 把声明好的事件对象加入到EventTrigger中
        et.triggers.Add(entry);
    

如果new了两个一样的事件监听类型也不会报错,可以通过这样添加代码,也可以通过遍历triggers的Entry,通过类型寻找,找到相应类型后直接在callback中添加相应的函数也可以

3、总结

EventTrigger可以让我们写更少的代码,可以在面板类中处理面板控件的事件逻辑,更加的面向对象,便于管理

EventTrigger

原文:EventTrigger

EventTrigger事件触发器。

相比较数据,属性,事件触发器是XAML的UI层中最重要的一个部分。

事件触发器中,触发的效果是动画,不再是setter。

也是很有意思的

技术图片
  <对象.Style>
                <Style TargetType="对象">                
                    <Style.Triggers>
                        <EventTrigger RoutedEvent="事件">
                          //动画
                        </EventTrigger>
                    </Style.Triggers>
                </Style>
 </对象.Style>
技术图片

 

下面给一个小小的例子

当鼠标移动要按钮上时,按钮的宽度会变宽,离开时按钮的宽度会变回去

技术图片
    <Grid>
        <Button Height="50" Width="100" >
            <Button.Style>
                <Style TargetType="Button">
                    <Setter Property="Content" Value="点击"/>
                    <Style.Triggers>
                        <EventTrigger RoutedEvent="MouseEnter">
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="Width" From="100" To="150" Duration="00:00:1"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                        <EventTrigger RoutedEvent="MouseLeave">
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="Width" From="150" To="100" Duration="00:00:1"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
      
    </Grid>
技术图片

技术图片

有很多的事件可以利用,在创建一个UI动画时,事件触发器是一个必不可少的哦

以上是关于EventTrigger 事件触发器的主要内容,如果未能解决你的问题,请参考以下文章

UGUI事件监听

EventTrigger

EventTrigger

UGUI中鼠标点击进入等事件的监听

unity eventtrigger怎么获取触发对象

UGUI事件系统——事件触发