28.UE5游戏框架,事件分发器,蓝图接口
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秒中后关闭

相关文章:
28.UE5游戏框架,事件分发器,蓝图接口
3-3 虚幻游戏框架拆解,游戏规则基础_哔哩哔哩_bilibili 目录 1.游戏架构 2.事件分发器 2.1UI控件中的事件分发器 2.2Actor蓝图中的事件分发器 2.2.1动态决定Actor的分发事件 2.2.2父类中定义事件分发器,子类实现事件分发器 2.3组件蓝图中实现事件…...
Puppeteer 和 Cheerio 在 Node.js 中的应用
Puppeteer 和 Cheerio 在 Node.js 中的应用 引言 在现代 Web 开发中,自动化测试、数据抓取和页面分析是常见的需求。Node.js 提供了丰富的工具和库来满足这些需求。本文将介绍两个在 Node.js 中常用的库:Puppeteer 和 Cheerio,它们分别用于…...
Unity2D 关于N方向俯视角 中 角色移动朝向的问题
通常对俯视角2d游戏的角色移动我们使用简单2d混合树的方式,但是其不移动时的朝向该如何定义? 十分简单:移动和不移动之间形成逻辑自锁 详细说明思路就是再创建一个简单2d混合树 定义其N方向的idle 并用lastDirc二维向量保存玩家输入,当玩家输…...
pytorch 和tensorflow loss.item()` 只能用于只有一个元素的张量. 防止显存爆炸
loss.item() 是 PyTorch 中的一个方法,它用于从一个只包含单个元素的张量(tensor)中提取出该元素的值,并将其转换为一个 Python 标量(即 int 或 float 类型)。这个方法在训练神经网络时经常用到,…...
链表刷题|判断回文结构
题目来自于牛客网,本文章仅记录学习过程的做题理解,便于梳理思路和复习 我做题喜欢先把时间复杂度和空间复杂度放一边,先得有大概的解决方案,最后如果时间或者空间超了再去优化即可。 思路一:要判断是否为回文结构则…...
海盗王集成网关和商城服务端功能golang版
之前用golang把海盗王的商城服务端和网关服务端都重写了一次。 后来在同时开启网关和商城服务时,发现窗口数量有点多,有时要找到商城窗口比较麻烦。 既然2个都是用golang govcl写的,是不是可以集成到一起,方便使用呢?…...
SCI 中科院分区中位于4区,JCR分区位于Q2 是什么水平?
环境: ACM Transactions on Interactive Intelligent Systems 《Acm Transactions On Interactive Intelligent Systems》(《交互式智能系统上的 Acm 事务》)是一本由ASSOC COMPUTING MACHINERY (ACM)出版的Computer Interaction-Computer Science-Human学术刊物&…...
微知-Mellanox网卡的另外一种升级方式mlxup?(mlxup -d xxx -i xxx.bin)
背景 一般升级Mellanox网卡使用flint,还有另外一种叫做mlxup。 NVIDIA 提供了两种固件工具来更新和查询适配器固件: MLXUP - 固件更新和查询实用程序。该实用程序允许扫描服务器计算机以查找可用的 NVIDIA 适配器,并指示每个适配器是否需要…...
《Shader入门精要》透明效果
代码以及实例图可以看github :zaizai77/Shader-Learn: 实现一些书里讲到的shader 在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道(Alpha Channel)。当开启透明混合后,当一个物体被渲染到屏幕上时&…...
Linux之SELinux与防火墙
一、SELinux的说明 开发背景与目的: SELinux由美国国家安全局(NSA)开发,旨在避免资源的误用。传统的Linux基于自主访问控制(DAC),通过判断进程所有者/用户组与文件权限来控制访问,对…...
深度学习使用LSTM实现时间序列预测
大家好,LSTM是一种特殊的循环神经网络(RNN)架构,它被设计用来解决传统RNN在处理长序列数据时的梯度消失和梯度爆炸问题,特别是在时间序列预测、自然语言处理和语音识别等领域中表现出色。LSTM的核心在于其独特的门控机…...
Vue第一篇:组件模板总结
前言 本文希望读者有一定的Vue开发经验,样例采用vue中的单文件组件,也是我的个人笔记,欢迎一起进步 必须有根元素 这是一个最简单的vue单文件组件,<template></template>被称为模板,模板中必须有一个根元素…...
时钟使能、
时钟使能 如果正确使用,时钟使能能够显著地降低系统功耗,同时对面积或性能的影响极小。但是如果不正确地使用时钟使能, 可能会造成下列后果: • 面积增大 • 密度减小 • 功耗上升 • 性能下降 在许多使用大量控制集的…...
1. Autogen官网教程 (Introduction to AutoGen)
why autogen The whole is greater than the sum of its parts.(整体的功能或价值往往超过单独部分简单相加的总和。) -Aristotle autogen 例子 1. 导入必要的库 首先,导入os库和autogen库中的ConversableAgent类。 import os from autogen import Conversable…...
开源账目和账单
开源竞争: 开源竞争(当你无法彻底掌握技术的时候,你就开源这个技术,让更多的人了解这个技术,形成更多的技术依赖,你会说这不就是在砸罐子吗?一个行业里面总会有人砸罐子,你不如先砸…...
vue2面试题10|[2024-11-24]
问题1:vue设置代理 如果你的前端应用和后端API服务器没有运行在同一个主机上,你需要在开发环境下将API请求代理到API服务器。这个问题可以通过vue.config.js中的devServer.proxy选项来配置。 1.devServer.proxy可以是一个指向开发环境API服务器的字符串&…...
c语言与c++到底有什么区别?
成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于c语言与c区别的相关内容! 关…...
云计算-华为HCIA-学习笔记
笔者今年7月底考取了华为云计算方向的HCIE认证,回顾从IA到IE的学习和项目实战,想整合和分享自己的学习历程,欢迎志同道合的朋友们一起讨论! 第二章:服务器基础 服务器是什么? 服务器本质上就是个性能超强的…...
优先算法 —— 双指针系列 - 复写零
目录 1. 复写零 2. 算法原理 一般情况下 改为就地操作:从左到右(错误) 从右到左 总结一下解决方法: 如何找到最后一个复写的数 特殊情况 完整步骤: 3. 代码 1. 复写零 题目链接:1089. 复写零 - 力…...
初识Linux—— 基本指令(下)
前言: 本篇继续来学习Linux的基础指令,继续加油!!! 本篇文章对于图片即内容详解,已同步到本人gitee:Linux学习: Linux学习与知识讲解 Linux指令 1、查看文件内容的指令 cat cat 查看文件…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
