28.UE5游戏框架,事件分发器,蓝图接口

embedded/2024/11/25 6:18:34/

3-3 虚幻游戏框架拆解,游戏规则基础_哔哩哔哩_bilibili

目录

1.游戏架构

2.事件分发器

2.1UI控件中的事件分发器

2.2Actor蓝图中的事件分发器

 2.2.1动态决定Actor的分发事件

2.2.2父类中定义事件分发器,子类实现事件分发器

2.3组件蓝图中实现事件分发器

3.蓝图接口


1.游戏架构

大概记住流程就行了,理解最重要

2.事件分发器

理解事件分发器,需要从两个角度出发:

        1.事件分发器的(声明者)调用者(声明事件分发器,并决定调用事件的时机,但不负责事件内部逻辑)

        2.事件分发器的实现者(不决定什么时候调用事件,只负责实现事件逻辑)

事件分发器的声明者和调用者通常是一个对象,且和事件分发器的实现者往往是分离的,因为如果一个蓝图即是(声明者)调用者又实现者,那么事件分发器往往不如直接声明、实现、调用一个函数直接。

事件分发器主要有三种使用场景::

1.UI控件中:

        让自己设计的UI控件能够实现一些功能:点击功能,值变更功能等等。

                (声明者)调用者:UI控件负责调用时机

                实现者:使用UI控件的人,负责事件的具体实现逻辑

2.Actor蓝图中:

        2.1在程序运行时,动态的给Actor分发事件(Actor定义时负责调用时机,运行时负责事件实现)

        2.2父类中定义事件分发器,子类实现事件分发器

3.组件蓝图中:

        组件负责定义事件的调用时机,使用组件的负责实现具体的事件逻辑

2.1UI控件中的事件分发器

设计通用按钮,并让通用按钮拥有点击事件,案例可参考20.UE5UI预构造,开始菜单,事件分发器_ue5 菜单-CSDN博客

2.2Actor蓝图中的事件分发器

 2.2.1动态决定Actor的分发事件

        案例:

                例如现在有一款养宠物的游戏,有两个难度,普通,困难。

                当难度时普通时,饥饿值为0后,5秒之后宠物死亡。

                当难度为困难时,饥饿值为0后,宠物直接死亡。

首先创建蓝图Actor,命名为我的宠物,添加饥饿值变量,并在事件开始时声明一个每5秒扣除5点饥饿值的定时器事件,当生命值归零后调用事件分发器中的,当饥饿小于0的事件。我的宠物作为事件分发器的声名者和调用者。

本来应该在游戏实例中添加游戏难度,并且绑定不同难度的当饥饿小于0时的实现逻辑。但是为了方便演示,就在我的玩家控制器中进行演示了。

按1为普通难度,当饥饿小于0时,就延迟5秒死亡

按2,就是困难难度,当饥饿小于0的时候,直接死亡

2.2.2父类中定义事件分发器,子类实现事件分发器

        还有一种情况就是在父类中定义事件分发器,子类中实现事件分发器

        案例:我的宠物中有一个子蓝图,为骆驼,当饥饿值归零时,可以无视游戏难度,依旧坚持5秒钟死亡

创建我的宠物子蓝图,并命名为:骆驼

骆驼这个宠物,在开始事件中,分配当饥饿小于0的事件

回到我的控制器蓝图,按3创建骆驼,这个时候无论游戏难度是多少,骆驼都能坚持5秒死亡。

这个案例主要是理解,在游戏运行中动态分配事件,以及子类分配父类的事件(类似重载)。

2.3组件蓝图中实现事件分发器

创建我的组件蓝图

为组件添加事件分发器

那么所有添加了我的组件的蓝图,都可以实现我的组件事件蓝图。

3.蓝图接口

接口就好像电脑上的USB接口一样, 接口只管定义尺寸和规格(参数输入),所有手机厂商,U盘厂商,鼠标键盘厂商都需要按照这个尺寸和规格设计接口才能接入到电脑上,但是具体的实现功能不同,比如说手机的USB线可以传输数据和充电,U盘可以快速读写,鼠标键盘可以通过USB和电脑进行交互等等。

接口只管定义规格,具体接口的实现方式交给蓝图Actor进行实现。

案例:

        实现一个功能,按数字键盘1,让场上所有的灯光打开。

创建蓝图接口

在接口中添加一个函数,函数有一个输入,浮点类型的开灯几秒

创建灯光

创建Actor蓝图,命名为我的灯,添加点光源组件,并设置强度和颜色

 将点光源的默认可视设置为关闭

 在我的灯蓝图中,打开类设置,添加接口,我的接口

 设置灯的可视性,并延迟,打开灯几秒后,进行可视性的关闭

 接下来实现,按1打开灯

打开我的控制器蓝图

获取场景中所有实现了:我的接口的Actor,并遍历出所有的Actor,并调用打开灯的接口,开灯事件可以设置为5秒。

将我的灯拖入场景中,运行游戏,按数字键1,灯光打开,并在5秒中后关闭


http://www.ppmy.cn/embedded/140310.html

相关文章

16. 清理Python包管理工具(pip 和 conda)的缓存和冗余文件

这个专栏记录我学习/科研过程中遇到的一些小问题以及解决方案,一些问题可能比较蠢请见谅。自用,仅供参考。 ------------------------------------------------------------------------------------ 清理Python包管理工具(pip 和 conda&am…

2024最新python使用yt-dlp

2024最新python使用yt-dlp下载YT视频 1.获取yt的cookie1)google浏览器下载Get cookies.txt LOCALLY插件2)导出cookie 2.yt-dlp下载[yt-dlp的GitHub地址](https://github.com/yt-dlp/yt-dlp?tabreadme-ov-file)1)使用Pycharm(2024.3)进行代码…

详解Qt QBuffer

文章目录 **QBuffer 的详解****前言****QBuffer 是什么?****QBuffer 的主要用途****构造函数****主要成员函数详解****1. open()****原型:****作用:****参数:****返回值:****示例代码:** **2. write()****原…

东华大学oj 汉诺塔 第m步问题

问题描述 给定三根杆A、B、C和大小不同的几个盘子。这些盘子按尺寸递减顺序套在A杆上,最小的在最上面。现在的任务是把这些盘子从A杆移到C杆且保持原来堆放顺序。在实现任务时,每次只能移动一个盘子,且任何时刻不允许大的盘子放在小的盘子上…

Python安装出现严重错误的解决方法_0x80070643-安装时发生严重错误

使用这个软件MicrosoftProgram_Install_and_Uninstall.meta.diagcab把关于Python一个个组件全部删除,然后就能够重新安装Python了 修复阻止程序安装或删除的问题 - Microsoft 支持 这里下载

【C++】从C语言到C++学习指南

如果你也是从C语言一路过来的,那么请一起看下去吧! 文章目录 面型对象程序设计C基础C和C一些语法区别C在非对象方面对C语言的扩充C的一些标准(兼容旧标准) 首先,在C的学习中,我们要时刻清醒一点&#xff1…

Java 实现PDF添加水印

maven依赖&#xff1a; <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.4.3</version> </dependency>网络地址添加水印代码&#xff1a; public static boolean waterMarkNet(Stri…

开源网络安全检测工具——伏羲 Fuxi-Scanner

伏羲是一款开源的网络安全检测工具&#xff0c;适用于中小型企业对企业信息系统进行安全巡航检测 本系统通过模块化提供多种安全功能 基于插件的漏洞扫描功能持续化漏洞管理多种协议的弱口令检测企业子域名收集企业 IT 资产管理及服务发现端口扫描AWVS(Acunetix Web Vulnerab…