当前位置: 首页 > news >正文

UE5自定义蓝图节点(二)

继承于UBlueprintAsyncActionBase的类,异步输出节点的实现方法,代码测试正常

.h

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Kismet/BlueprintAsyncActionBase.h"
#include "MyClassAsyncActionBase.generated.h"/*** */DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FResponsDeleget,int32,ID,FString,Data);UCLASS()
class NEWCOUSTNODE_API UMyClassAsyncActionBase : public UBlueprintAsyncActionBase
{GENERATED_BODY()public:UPROPERTY(BlueprintAssignable)FResponsDeleget Onsuccess;UPROPERTY(BlueprintAssignable)FResponsDeleget OnFail;UPROPERTY()int temp = 0;void isEqual();UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"))static UMyClassAsyncActionBase* MyClassAsyncActionBase(const int ID);virtual void Activate() override;
};
/*
这是一个 Unreal Engine 项目的头文件(.h 文件),其中包含了一个自定义的蓝图异步操作基类 `UMyClassAsyncActionBase`。1. `#pragma once`: 这是预处理指令,确保该头文件只会被编译一次,以防止重复包含。2. `#include "CoreMinimal.h"`: 这是 Unreal Engine 的核心头文件,它包含了一些常用的基本功能和宏定义。3. `#include "Kismet/BlueprintAsyncActionBase.h"`: 这是 Unreal Engine 提供的蓝图异步操作基类的头文件,`UMyClassAsyncActionBase` 将继承自它,以便在蓝图中实现异步功能。4. `#include "MyClassAsyncActionBase.generated.h"`: 这是一个自动生成的文件,其中包含了 `UMyClassAsyncActionBase` 类的声明,它由 Unreal Engine 的蓝图系统根据以下内容生成。5. `DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FResponsDeleget,int32,ID,FString,Data);`: 这是一个声明了两个参数的动态多播代理(Delegate),称为 `FResponsDeleget`。它有两个参数:一个整数类型的 `ID` 和一个字符串类型的 `Data`。这个代理用于在异步操作完成时触发并传递结果。6. `UCLASS()`: 这是一个宏,用于标记 `UMyClassAsyncActionBase` 类为 Unreal Engine 的蓝图类。通过使用这个宏,我们可以在蓝图中继承这个类,并在蓝图中实现自定义的异步逻辑。7. `GENERATED_BODY()`: 这是一个宏,用于告诉 Unreal Engine 在这个类中生成相关的代码。这包括成员变量、函数等的实现。8. `UPROPERTY(BlueprintAssignable)`: 这是一个 Unreal Engine 的宏,用于声明一个属性,使其在蓝图中可见并允许绑定事件。9. `FResponsDeleget Onsuccess;`: 这是一个声明了代理 `FResponsDeleget` 的成员变量 `Onsuccess`,用于在异步操作成功时触发事件。10. `FResponsDeleget OnFail;`: 这是一个声明了代理 `FResponsDeleget` 的成员变量 `OnFail`,用于在异步操作失败时触发事件。11. `UPROPERTY()`: 这是 Unreal Engine 的宏,用于声明一个属性(成员变量)。12. `int temp = 0;`: 这是一个整型成员变量 `temp` 的初始化,初始值为 0。13. `void isEqual();`: 这是一个未实现的函数声明,可能是作者计划在后续实现类中的功能。14. `UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"))`: 这是一个宏,用于声明一个蓝图可调用的函数,它标记了函数 `MyClassAsyncActionBase` 为蓝图中的可用函数。15. `static UMyClassAsyncActionBase* MyClassAsyncActionBase(const int ID);`: 这是一个静态函数声明,用于创建并返回 `UMyClassAsyncActionBase` 类的实例。函数参数为整数类型的 `ID`。16. `virtual void Activate() override;`: 这是 Unreal Engine 的蓝图异步操作基类中的虚函数,将在子类中被实现,用于启动异步操作。
*/

.cpp

// Fill out your copyright notice in the Description page of Project Settings.#include "MyClassAsyncActionBase.h"UMyClassAsyncActionBase* UMyClassAsyncActionBase::MyClassAsyncActionBase(const int ID)
{UMyClassAsyncActionBase* NewFeroxNod = NewObject<UMyClassAsyncActionBase>();NewFeroxNod->temp = ID;return NewFeroxNod;}void UMyClassAsyncActionBase::Activate()
{isEqual();}
void UMyClassAsyncActionBase::isEqual()
{if (temp>0){Onsuccess.Broadcast(temp,"success! from c++");}else{OnFail.Broadcast(-228,"Fail");}RemoveFromRoot();
}/*
这是 Unreal Engine 项目中 `MyClassAsyncActionBase.cpp` 文件的内容,它实现了之前在头文件中声明的 `UMyClassAsyncActionBase` 类的成员函数。1. `#include "MyClassAsyncActionBase.h"`: 这是包含了头文件 `MyClassAsyncActionBase.h`,以便在这个源文件中使用 `UMyClassAsyncActionBase` 类的定义和成员函数。2. `UMyClassAsyncActionBase* UMyClassAsyncActionBase::MyClassAsyncActionBase(const int ID)`: 这是静态函数 `MyClassAsyncActionBase` 的实现。它创建并返回 `UMyClassAsyncActionBase` 类的实例。函数参数 `ID` 是一个整数,用于初始化实例的 `temp` 成员变量。3. `UMyClassAsyncActionBase* NewFeroxNod = NewObject<UMyClassAsyncActionBase>();`: 在内存中创建一个新的 `UMyClassAsyncActionBase` 类的实例。4. `NewFeroxNod->temp = ID;`: 将参数 `ID` 的值赋给新实例的 `temp` 成员变量。5. `return NewFeroxNod;`: 返回创建的新实例。6. `void UMyClassAsyncActionBase::Activate()`: 这是在蓝图异步操作基类中定义的虚函数 `Activate` 的实现。它在异步操作开始时被调用。7. `isEqual();`: 调用成员函数 `isEqual()`,执行异步操作逻辑。8. `void UMyClassAsyncActionBase::isEqual()`: 这是自定义的成员函数 `isEqual()` 的实现。在这个函数中,根据 `temp` 成员变量的值进行条件判断。9. `if (temp>0)`: 如果 `temp` 大于 0,表示异步操作成功。10. `Onsuccess.Broadcast(temp,"success! from c++");`: 触发 `Onsuccess` 代理,将 `temp` 的值和一个成功的字符串传递给绑定了这个事件的蓝图。11. `else`: 如果 `temp` 小于等于 0,表示异步操作失败。12. `OnFail.Broadcast(-228,"Fail");`: 触发 `OnFail` 代理,将一个特定的错误码和字符串传递给绑定了这个事件的蓝图。13. `RemoveFromRoot();`: 从内存中移除当前对象。这是一种在异步操作完成后释放实例内存的常用做法。
*/

相关文章:

UE5自定义蓝图节点(二)

继承于UBlueprintAsyncActionBase的类&#xff0c;异步输出节点的实现方法&#xff0c;代码测试正常 .h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "Kismet/BlueprintA…...

Bean容器中的ThreadPoolTaskExecutor需要手动关闭吗

ThreadPoolTaskExecutor 是 Spring 提供的一个方便的线程池实现&#xff0c;用于异步执行任务或处理并发请求。 在使用 ThreadPoolTaskExecutor 作为 Spring Bean 注册到容器中后&#xff0c;Spring 会负责在应用程序关闭时自动关闭所有注册的线程池&#xff0c;所以不需要手动…...

Redis学习路线(3)——Redis的Java客户端

一、如何使用Redis的Java客户端 官方文档&#xff1a; https://redis.io/docs/clients/java/ Java-Redis客户端使用场景Jeids 以Redis命令作为方法名称&#xff0c;学习成本低&#xff0c;简单实现&#xff0c;但是Jedis实例是线程不安全的&#xff0c;多线程环境下需要基于连…...

行车遥控接线图

这个一般只有电工才会用。 主要是 【共线和总电】让人疑惑。 这图实际就是PLC的梯形图。 共电&#xff1a;接主电源。【它串联10A保险丝&#xff0c;再到继电器】 总电&#xff1a;它是所有继电器的公共端。【共电的继电器吸合&#xff0c;共电和总电就直通了。】共电的继电器…...

区块链实验室(11) - PBFT耗时与流量特征

以前面仿真程序为例&#xff0c;分析PBFT的耗时与流量特征。实验如下&#xff0c;100个节点构成1个无标度网络&#xff0c;节点最小度为5&#xff0c;最大度为38. 从每个节点发起1次交易共识。统计每次交易的耗时以及流量。本文所述的流量见前述仿真程序的说明:区块链实验室(3)…...

Shell编程基础(三)环境变量 位置变量 系统内置变量

环境变量 & 环境变量环境变量范围父子进程之间有效指定用户有效所有用户有效 位置变量系统内置变量 环境变量 在脚本种直接定义的变量&#xff0c;只能在当前shell进程中使用 若想要在其他shell进程中使用&#xff0c;可以将变量声明为 环境变量 export 变量名 &#xff…...

P5718 【深基4.例2】找最小值

题目描述 给出 n n n 和 n n n 个整数 a i a_i ai​&#xff0c;求这 n n n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n n n&#xff0c;表示数字个数。 第二行输入 n n n 个非负整数&#xff0c;表示 a 1 , a 2 … a n a_1,a_2 \dots a_n a1​,a2​……...

C++——STL容器之list链表的讲解

目录 一.list的介绍 二.list类成员函数的讲解 2.2迭代器 三.添加删除数据&#xff1a; 3.1添加&#xff1a; 3.2删除数据 四.排序及去重函数&#xff1a; 错误案例如下&#xff1a; 方法如下&#xff1a; 一.list的介绍 list列表是序列容器&#xff0c;允许在序列内的任何…...

使用for循环输出左上三角、右上三角、左下三角、右下三角、上下三角

1、输出如下图形&#xff1a; #include<stdio.h> int main() {/*输出图形 666666666666666*/for(int i1;i<5;i){for(int j1;j<i;j){putchar(6);}printf("\n"); } return 0; } 2、输出如下图形&#xff1a; #include<stdio.h> int main() {/*输出图…...

CAXA中.exb或者.dwg文件保存为PDF

通常CAXAZ中的文件为.exb或者.dwg格式&#xff0c;我们想打印或者保存为PDF文件格式&#xff0c;那么就用一下的方法&#xff1a; CAXA文件如图所示&#xff1a; 框选出你要打印的图纸&#xff01;&#xff01;&#xff01;&#xff01; 我们选择"菜单"->"…...

华为刷题:HJ3明明随机数

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int N scan.nextInt();int[] arr new int[N];for (int i 0; i < N; i) {int n sca…...

ENVI提取NDVI与植被覆盖度估算

目标是通过ENVI计算植被覆盖度结合ArcGIS出图得到植被覆盖图。 一、植被覆盖度的定义: 植被覆盖度( FractionalVegetation Cover,FVC) 通常定义为植被( 包括叶、茎、枝) 在地面的垂直投影面积占统计区总面积的百分比,它量化了植被的茂密程度,反应了植被的生长态势,是刻画…...

Arm 扩大开源合作伙伴关系,加强投入开放协作

作者&#xff1a;Arm 开源软件副总裁 Mark Hambleton Arm 和我们的生态系统的关键信念之一是与开源社区合作&#xff0c;共创一个高度发达的 Arm 架构&#xff0c;使软件的落地更加稳定&#xff0c;从而让全球数百万开发者能够测试并创建自己的应用。 为此&#xff0c;Arm 支…...

Kubernetes 的核心概念:Pod、Service 和 Namespace 解析

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…...

互联网搜索的学习笔记

1. 参考资料 《Internet Search Tips》《Google Search Operators: The Complete List (42 Advanced Operators)》 2. 预备知识 2.1 查询语法 2.1.1 -&#xff1a;排除符 用于排除指定关键字。例如&#xff0c;如果想搜索“苹果”但不想看到“苹果手机”的结果&#xff0c;…...

vue事件修饰符

vue事件修饰符 1、目标2、语法 1、目标 在事件后面.修饰符名-给事件带来强大功能 2、语法 事件名.修饰符“methods里的函数” 修饰符列表 .stop - 阻止事件冒泡 示例&#xff1a; <template><div id"app"><div click"fatherFn"><…...

【安全】web中的常见编码浅析浏览器解析机制

目录 常见编码 一、ASCII码 二、URL编码 三、Unicode编码 四、HTML实体编码 结合编码理解浏览器解析机制 常见编码 一、ASCII码 ASCII (American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09; 计算机内部&#xff0…...

Ceph概述、准备ceph部署环境、cephadm概述、安装Ceph集群、ceph块存储、存储池、rbd镜像管理、ceph客户端配置

day03 day03ceph概述部署Ceph节点准备cephadm准备基础环境安装ceph实现块存储块存储基础存储池镜像ceph客户端 ceph概述 ceph可以实现的存储方式&#xff1a; 块存储&#xff1a;提供像普通硬盘一样的存储&#xff0c;为使用者提供“硬盘”文件系统存储&#xff1a;类似于NFS…...

python selenium爬虫自动登录实例

拷贝地址&#xff1a;python selenium爬虫自动登录实例_python selenium登录_Ustiniano的博客-CSDN博客 一、概述 我们要先安装selenium这个库&#xff0c;使用pip install selenium 命令安装&#xff0c;selenium这个库相当于机器模仿人的行为去点击浏览器上的元素&#xff0…...

el-cascader 数据的回显

<el-cascaderplaceholder"试试搜索":options"allOptions":props"{ multiple: true }"v-model"options"filterable style"width: 80%;max-height:240px;overflow-y:scroll;"></el-cascader> allOptions里面包含…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...