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 事件触发器的主要内容,如果未能解决你的问题,请参考以下文章