LGUIEventDelegate
未使用过LGUI插件的同学可先看看之前的博客:在UE4里使用LGUI插件(一)
DrawableEvent从LGUI3.x版本开始改名为LGUIEventDelegate
由于LGUI是基于组件的工作流程的方式,需要在场景里构建大量的Actor层级,所以如果可以不用写代码(或连接蓝图)就能从一个Actor或Component中方便的调用另一个Actor或Component的函数就显得非常方便。那么DrawableEvent就可以做这样的事情。
DrawableEvent类似于Unity中的UnityEvent或者NGUI的EventDelegate,作用就是可以方便的调用另外一个Actor或Component的函数。
下面我们来看一下如何使用DrawableEvent。
示例一:Hello World!
目标:点击按钮调用Actor的函数来打印Hello World
1、新建个空场景,创建WorldSpaceUI
2、为了方便默认的GameMode交互,我们需要修改一下交互方式。选中WorldSpaceUIRoot,在Details面板中选中LGUIWorldSpaceInteraction组件,修改InteractionSource属性参数为CenterScreen,这样就可以用屏幕中心作为光标了
3、右键点击WorldSpaceUIRoot后面的倒三角按钮,选择Create UI Element -> Button来创建个按钮。创建按钮是因为按钮里面有个自带的OnClick事件就是DrawableEvent。
4、选中刚才创建的Button,在Details面板中选中UIButton组件,找到LGUI-Button中的On Click(),点击后面的"+“号添加个事件调用,点击On Click()左边的小三角展开。如上面所说,DrawableEvent可以调用另一个Actor或Component中的函数,所以我们需要指定一些参数,下面创建个Actor和函数来调用。
5、创建个Actor蓝图取名TestActor,在此蓝图中新建个函数名叫CallFromDrawableEvent,函数的内容就简单的打印个"Hello World!”,然后编译保存
6、然后把刚才创建的TestActor拖拽到场景中
7、重新选中Button中的UIButton组件,在TargetActor中选择场景中的TestActor
8、然后点击Component后面的按钮,在弹出的窗口中选择(ActorSelf)
9、再点击Function后面的按钮,在弹出的窗口中选择CallFromDrawableEvent函数
参数指定完成!我们来测试一下。点击Play运行,然后用wsadeq移动到Button处用鼠标左键点击,就可以看见"Hello World!"打印出来了!
如果需要调用ActorComponent中的某个函数,方法也是一样的,只是在第8步的弹出窗口中选择对应的Component就行。
示例二:自定义参数
示例一是调用的无参数的函数,但实际上大部分情况下我们都希望能传入不同的参数给函数。
目标:用DrawableEvent给函数传字符串参数,打印这些字符串
1、首先需要修改CallFromDrawableEvent,添加字符串作为参数。打开TestActor蓝图,选中CallFromDrawableEvent函数并在右侧的Inputs中添加一个String作为输入参数,并把传入的string打印出来
2、选中Button上的UIButton组件,点击OnClick()事件下的Function右边的按钮,再次选择CallFromDrawableEvent事件。然后Parameter参数后面就会多了个字符串的输入框,我们在输入框里写入"这是从DrawableEvent事件调用的"。
再来测试一下,点击Play播放,屏幕上就会打印刚才输入的字符串
示例三:自定义DrawableEvent事件
前面的示例都是用的UIButton自带的OnClick参数,显然这是不够的,我们需要可以自定义事件
目标:用自定义事件替代OnClick
1、首先创建个自定义的UIButton。新建个蓝图继承自UISelectableComponent并命名为MyUIButton
2、打开MyUIButton蓝图,点击ClassSettings,在Detals面板的Interfaces中添加LGUIPointerClickInterface
3、双击蓝图左边的Interfaces/LGUI/OnPointerClick,可以在这里添加OnPointerClick点击事件的内容
4、重点来了,在Variables中添加新的变量命名为MyOnClick并设为public,类型改为LGUIDrawableEvent,编译,然后在DefaultValue中点击MyOnClick左边的小三角展开,把NativeParameterType属性改为String
5、在OnPointerClick函数里按照下图连线,在LGUIDrawableEventExecuteString的inParameter输入“这是自定义事件和参数”,编译保存
6、选中场景中的Button,右键点击右边的倒三角选择DuplicateActors来复制个Button,把复制的Button命名为MyCustomButton,移动MyCustomButton到新的位置防止与Button重叠
7、选中MyCustomButton,在Details面板中选中UIButton并删除,然后添加MyUIButton组件
8、选中MyUIButton组件,把Transition改为ColorTint,TransitionActor属性设为MyCustomButton
9、找到底下的My on Click(String)属性,点击后面的"+"号添加事件,然后把TargetActor设为场景中的TestActor,Component选择(ActorSelf),Function选择CallFromDrawableEvent (NativeParameter)
再次Play测试,点击MyCustomButton之后屏幕上就会打印 “这是自定义事件和参数”