使用事件驱动UI

科技   科技   2024-08-14 09:01   上海  


了解如何用事件来驱动UI元素的更新,从而优化UI元素。

制作UI元素时,建议对内容进行优化,以提高性能并减少低效。例如,根据项目范围,属性绑定可适用于向UI传递信息。但若有更为复杂的UI设置,或需优化项目,建议按需更新UI。 


此参考指南中将讲解向HUD传递信息的三种方式。这三种方法均可完成任务。第三个实例未使用tick事件进行更新,而非使用事件调度器手动更新信息,达到开销和性能最佳平衡。 


示例1.函数绑定


在此示例中,我将学习使用 函数绑定(Function Binding) 更新玩家的生命/能量。 


此处已设置基础生命/能量。 



设置好显示后,为名为 GetHealth 和 GetEnergy 的进度条 创建绑定。此类函数绑定投射到玩家角色蓝图,并指定生命和能量定义的变量。 
以下为GetHealth的绑定。为进行调试,已添加 Print String 节点将生命变量的值打印到屏幕。 


在下图中可看到玩家角色的生命和能量值被传递到HUD并在其中反映。同时还可看到,即使未更新生命值时,蓝色调试文本同样表明仍然逐帧检查生命值。 


本质上,使用此种方法等同于提问:"玩家角色蓝图是什么?"而在了解后,逐帧"提供生命和能量值"。对于小而简单的系统,此方法的效果上佳;但使用较复杂系统,且逐帧检查多个属性的更新时,此设置将导致性能降低。 

示例2.属性绑定


第2种方法是 属性绑定,比函数绑定开销更低。 

现在使用相同生命/能量设置,了解属性绑定的工作原理。 


在控件蓝图的 事件图表 中,使用 Event Construct 获取对玩家角色蓝图的引用。 

通过使用Event Construct,将投射到角色蓝图一次,并将信息存储为引
用,以便脚本无需逐帧调用该信息。 


之后可将进度条的值直接绑定到角色蓝图中的变量。 


利用此方法,则无需逐帧投射并检查"玩家角色蓝图是什么?"相反,仅逐帧查询生命和能量值。

根据项目规模,此方法更为高效;但若系统更复杂,则使用事件驱动可能更好。

示例3.事件驱动

现在将学习仅在事件变更时更新HUD的方法,继续使用相同生命/能量设置。 


在角色蓝图中,将 事件调度器 节点添加到递减生命的脚本末端。在此范例中,该事件调度器节点为 Call Update Health。 

为进行测试,将生命设为按下 F 键时递减。 


现在减少生命时,将调用此事件调度器。在HUD控件蓝图的事件图表中,可再次使用Event Construct获取并保存对玩家角色蓝图的引用。还可将自定义事件绑定到该角色蓝图中的事件调度器,调用事件调度器时便调用该自定义事件。 


现在,HUD控件蓝图中的自定义事件将在玩家生命变化时检查并更新其显示,而非无论是否变化固定进行检查。 

下图展示将生命和能量整合到同一个Event Construct脚本中的方法。 
自定义事件件 UpdateHealth
 和 UpdateEnergy 
与角色蓝图中的事件调度器绑定,仅在角色生命/能量值变化时调用。在绑定后构造HUD时,还可调用这两个自定义事件初始化显示。


相聚 Unreal Fest Shanghai 2024

当前在售限量500张五折门票,只要648,开启你的两天干货充电之旅!除了行业前沿的技术分享和探讨,我们还在现场为大家准备了各种虚幻引擎技术演示和业内小伙伴们打造的虚幻新作试玩,还有丰富的趣味活动和虚幻特别周边等你领取!

请注意,本次活动需凭票入场,采用实名制购票,具体购票方式见购票页面,更多议程内容将陆续公开,敬请关注。



近期焦点
Unreal Fest Shanghai 2024 | 虚幻引擎技术开放日,开票啦!
通过游戏动画示例项目获取500多种免费动画
UOD Awards 2024 作品征集,启动!
虚幻引擎5.4现已发布
GDC 2024:来自State of Unreal的重大新闻
欢迎来到全新的虚幻引擎网站
我们将在四月下旬更新虚幻引擎、Twinmotion和RealityCapture的定价


扫描下方二维码,关注后点击菜单栏按钮“更多内容”并选择“联系我们”获得更多虚幻引擎的授权合作方式和技术支持;选择“招聘”,即可了解最新招聘信息。

长按屏幕选择“识别二维码”关注虚幻引擎
“虚幻引擎”微信公众账号是Epic Games旗下Unreal Engine的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。


虚幻引擎
Epic Games 旗下 Unreal Engine 虚幻引擎官方订阅号
 最新文章