Blueprint —— Events

目录

一,Event Level Reset

二,Event Actor Begin Overlap

三,Event Actor End Overlap

四,Event Hit

五,Event Any Damage

六,Event Point Damage

七,Event Radial Damage

八,Event Actor Begin Cursor Over

九,Event Actor End Cursor Over

十,Event Begin Play

十一,Event End Play

十二,Event Destroyed

十三,Event Tick

十四,Event Receive Draw HUD

十五,Custom Event


        事件(Events) 是从游戏代码中调用的节点, 在 事件图表(EventGraph)中开始执行单独的网络; 它们使蓝图执行一系列操作,对游戏中发生的特定事件(如游戏开始、关卡重置、受到伤害等)进行回应;

        这些事件可在蓝图中访问,以便实现新功能,或覆盖/扩充默认功能;任意数量的 Events 均可在单独 EventGraph 中使用,但每种类型只能使用一个;

        一个事件只能执行一个目标;如果想要从一个事件触发多个操作,需要将它们线性串联起来;

 

一,Event Level Reset

注,此蓝图事件节点仅在关卡蓝图中可用;

        Level Reset 事件在关卡重启时发出执行信号; 它在关卡重新加载后进行某项触发时非常实用,如玩家角色已死亡,但关卡无需重新加载时;

二,Event Actor Begin Overlap

多项条件同时满足时,将执行该事件:

  • Actor 之间的碰撞响应必须允许重叠;
  • 执行事件的两个 Actor 的 Generate Overlap Events 均设为 true;
  • 两个 Actor 的碰撞开始重叠;两者移到一起或其中一个创建时与另一个重叠;

Other Actor:与此蓝图重叠的Actor;

三,Event Actor End Overlap

多项条件同时满足时,将执行该事件:

  • Actor 之间的碰撞响应必须允许重叠;
  • 执行事件的两个 Actor 的 Generate Overlap Events 均设为 true;
  • 两个 Actor 的碰撞停止重叠;它们将分离,或在其中一个将被销毁;

Other Actor:与此蓝图重叠的Actor;

四,Event Hit

        只要其中一个相关 Actor 的碰撞设置中 Simulation Generates Hit Events 设为 true,该事件便会执行;

五,Event Any Damage

注,此蓝图事件节点仅在服务器上执行;在单人游戏中,本地客户端即视为服务器;

        当需要处理一般伤害时,此事件会被传递;如溺水或环境破坏,不是特别的点伤害或径向伤害;

  • Damage,传入 Actor 的伤害量;
  • Damage Type,输出伤害上包含额外数据的对象;
  • Instigated By,负责伤害的对象的控制器(Controller),可是开枪的玩家控制器,或是投手雷造成伤害的 AI控制器;
  • Damage Causer,输出伤害的 Actor,这可以是子弹或爆炸,

六,Event Point Damage

注,此蓝图事件节点仅在服务器上执行;在单人游戏中,本地客户端即视为服务器;

  • Damage,传入 Actor 的伤害量;
  • Damage Type,输出伤害上包含额外数据的对象;
  • Hit Location,应用伤害的位置;
  • Hit Normal,碰撞方向;
  • Hit Component,被命中的执行 Actor 上的组件;
  • Bone Name,命中的骨骼名称;
  • Shot from Direction,伤害来源的方向;
  • Instigated By,负责伤害的 Actor,这是开枪或投手雷造成伤害的 Actor;
  • Damage Causer,出伤害的 Actor,这可以是子弹或爆炸;

七,Event Radial Damage

注,此蓝图事件节点仅在服务器上执行;在单人游戏中,本地客户端即视为服务器;

  • Damage Received,从事件接收的伤害量;
  • Damage Type,输出伤害上包含额外数据的对象;
  • Origin,3D 空间中的伤害来源位置;
  • Hit Info,命中收集到的所有数据,可break以访问数据单个;
  • Instigated By,发起伤害的控制器(AI 或玩家);
  • Damage Causer,输出伤害的 Actor,可以是子弹、火箭、激光或角色的拳击;

八,Event Actor Begin Cursor Over

使用鼠标界面时,鼠标光标在 Actor 上悬停时执行的事件;

九,Event Actor End Cursor Over

使用鼠标界面时,鼠标光标在 Actor 上移开时执行的事件;

十,Event Begin Play

游戏开始时将在所有 Actor 上触发此事件;游戏开始后spawned所有 Actor 上均会立即调用此事件;

十一,Event End Play

Actor 不存在于世界场景中时执行此事件;

  • End Play Reason,说明 Event End Play 被调用原因的枚举;

十二,Event Destroyed

Actor 被销毁时执行此事件;

注,Destroyed 事件将在之后的版本中移除!Destroyed 函数的功能已合并到 EndPlay 函数;

十三,Event Tick

游戏进程中每帧调用的简单事件;

  • Delta Seconds,输出帧之间的时间量;

十四,Event Receive Draw HUD

注,此事件仅限继承自 HUD 类的蓝图类可用;

  • Size X,渲染窗口的像素宽度;
  • Size Y,渲染窗口的像素高度;

十五,Custom Event

Custom Event 节点是拥有自身工作流程的特殊节点;

        和 Events 一样, Custom Events 有一个执行的输出引脚和可选的数据输出引脚;但自定义事件是由用户创建的, 且可在一个图表中多次调用它们;它们定义了一个执行独立网络的入口点, 但不能通过代码调用它们来执行的;而是依赖于 事件图表 的其他部分, 通过使用 Custom Event 调用或者通过 CE 或 KE 控制台命令来显示地执行它们;

        Custom Events 提供了一种创建自己的事件的方法,可在蓝图序列的任何地方调用这些事件;当把多个输出执行线连接到一个特定节点输入执行引脚时, 使用自定义事件可以简化图表的节点连线网络;甚至可在一个蓝图的图表中创建自定义事件,而在另一个图表中调用该事件;

创建自定义事件

 

调用自定义事件

        和常规的 Events 不同,需调用来触发自定义事件;

 

注,和常规的Events不同,常规事件在每个图表中每种事件类型仅能调用一次;但可在图表中多次调用一个自定义事件;这样,自定义事件就可以把多个执行输出分支连入到一个单独的执行输入上,而不需要直接连线;

疑难解答

        如在Custom Event节点上看到 警告! 条,提示 "不能找到名称为[CustomEvent]的函数" 信息,请 编译 蓝图;

        如修改了自定义事件上的输入参数的数量,那么当编译蓝图时,调用该自定义事件的所有节点都会出现错误;必须刷新调用自定义事件的所有节点,要想刷新一个单独节点或者一组选中的节点,请右击这些节点并选择 Refresh Nodes

 

 

### 如何搭建 SSE(Server-Sent Events)服务器 #### 使用 Go 实现 SSE 服务器 Go 提供了一种简洁的方式来实现 Server-Sent Events (SSE),通过 HTTP 协议可以直接返回 `text/event-stream` 类型的数据流。以下是基于引用的内容以及补充说明的一个完整示例: ```go package main import ( "fmt" "net/http" "time" ) func sseHandler(w http.ResponseWriter, r *http.Request) { // 设置响应头,指定 MIME 类型为 text/event-stream w.Header().Set("Content-Type", "text/event-stream") w.Header().Set("Cache-Control", "no-cache") w.Header().Set("Connection", "keep-alive") for i := 0; i < 10; i++ { // 向客户端发送数据 fmt.Fprintf(w, "data: This is message %d\n\n", i) // 刷新缓冲区以确保消息立即发送给客户端 w.(http.Flusher).Flush() time.Sleep(1 * time.Second) // 模拟延迟 } } func main() { http.HandleFunc("/events", sseHandler) // 注册处理函数到 /events 路径 fmt.Println("Starting server at port 8080") if err := http.ListenAndServe(":8080", nil); err != nil { // 启动服务 panic(err) } } ``` 上述代码实现了基本的 SSE 功能[^1]。该程序会每隔一秒向连接的客户端推送一条新消息。 --- #### 使用 Flask 和 Flask-SSE 实现 SSE 服务器 对于 Python 用户来说,可以通过 Flask 结合扩展库 Flask-SSE 来快速构建一个支持 SSE 的 Web 应用。以下是一个完整的例子: 首先安装依赖项: ```bash pip install flask flask-sse redis ``` 接着编写如下代码: ```python from flask import Flask, render_template_string from flask_sse import sse app = Flask(__name__) app.config["REDIS_URL"] = "redis://localhost" # 配置 Redis 地址 app.register_blueprint(sse, url_prefix='/stream') # 注册蓝图 @app.route('/') def index(): html_content = """ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>SSE Example</title> <script type="text/javascript"> const eventSource = new EventSource('/stream'); eventSource.onmessage = function(event) { console.log('New Message:', event.data); document.getElementById('output').innerText += 'Message received: ' + event.data + '\\n'; }; </script> </head> <body> <h1>Real-time Updates via SSE</h1> <pre id="output"></pre> </body> </html> """ return render_template_string(html_content) if __name__ == '__main__': app.run(debug=True) ``` 此脚本设置了 `/stream` 路由用于接收来自后端的消息,并将其推送到前端页面显示出来[^2]。 注意:为了使 Flask-SSE 正常工作,还需要启动本地 Redis 数据库作为消息队列的支持工具。 --- #### 使用 Node.js 创建 SSE 服务器 Node.js 原生提供了强大的网络编程能力,利用其内置的 `http` 模块同样能够轻松完成 SSE 的开发任务。这里给出一段基础示范代码: ```javascript const http = require('http'); const server = http.createServer((req, res) => { if (req.url === '/events' && req.headers.accept === 'text/event-stream') { res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' }); let counter = 0; setInterval(() => { res.write(`data: ${counter}\n\n`); counter++; }, 1000); req.socket.on('close', () => { console.log('Client disconnected.'); }); } else { res.end('Welcome to the SSE Demo!'); } }); server.listen(3000, () => { console.log('Server running on port 3000...'); }); ``` 以上实例展示了如何监听特定路径 (`/events`) 并持续广播计数器数值至已订阅的客户端上[^3]。 --- ### 总结 无论是选用哪种技术栈——Go、Python 或者 JavaScript(Node.js),都可以高效地建立起自己的 SSE 服务端逻辑来满足实际需求场景下的实时通信要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值