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

第 14 天:UE5 C++ 与蓝图(Blueprint)交互!

🎯 目标:

✅ 了解 C++ 与蓝图(Blueprint)交互的方式
✅ 在 C++ 中调用蓝图函数
✅ 让蓝图访问 C++ 变量和方法
✅ 使用 UFUNCTION、UPROPERTY 进行蓝图暴露
✅ 提高开发效率,让 C++ 和蓝图开发者高效协作

1️⃣ 为什么要让 C++ 与蓝图交互?

在 Unreal Engine 5 中,C++ 提供强大的底层逻辑,而 蓝图更适合快速调整游戏玩法。
C++ + 蓝图结合开发 = 既有性能,又有灵活性!
🚀

🎯 常见 C++ 与蓝图交互方式:

  1. C++ 定义变量 & 方法 → 蓝图访问 & 调用
  2. C++ 调用蓝图事件 & 函数
  3. C++ 创建蓝图子类
  4. 蓝图扩展 C++ 逻辑(继承 C++ 类)

2️⃣ 在 C++ 中暴露变量给蓝图

C++ 变量默认不可在蓝图中访问,需要使用 UPROPERTY() 暴露给蓝图。

🔹 修改 PlayerCharacter.h

📌 让变量 Health 可以被蓝图访问

#pragma once#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "PlayerCharacter.generated.h"UCLASS()
class MYGAME_API APlayerCharacter : public ACharacter
{GENERATED_BODY()public:APlayerCharacter();protected:virtual void BeginPlay() override;public:UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Character Stats")float Health;
};

📌 变量暴露给蓝图的关键词:

修饰符作用
EditAnywhere在蓝图编辑器可修改
BlueprintReadWrite在蓝图中可读写
Category=“xxx”让变量在 Details 面板归类

🔹 在蓝图中访问变量

  1. 打开 UE5,找到 PlayerCharacter

  2. 右键PlayerCharacter 选择Create Blueprint Class Based on PlayerCharacter(创建基于PlayerCharacter的蓝图类)

  3. 命名BP_PlayerCharacter,双击打开BP_PlayerCharacter

  4. 在 Details 面板修改 Health
    在这里插入图片描述

  5. 在 Event Graph 里读取 Health 并打印出来
    在这里插入图片描述

在这里插入图片描述

现在蓝图可以访问 C++ 变量了!

3️⃣ 在 C++ 中暴露方法给蓝图

🔹 修改 PlayerCharacter.h

📌 让 TakeDamage() 方法可被蓝图调用

UFUNCTION(BlueprintCallable, Category = "Character Actions")
void TakeDamage(float DamageAmount);

🔹 修改 PlayerCharacter.cpp

📌 实现 TakeDamage() 方法

#include "PlayerCharacter.h"APlayerCharacter::APlayerCharacter()
{Health = 100.0f;
}void APlayerCharacter::TakeDamage(float DamageAmount)
{Health -= DamageAmount;UE_LOG(LogTemp, Warning, TEXT("玩家受伤,当前血量:%f"), Health);
}

🔹 在蓝图中调用方法

  1. 在 PlayerCharacter 蓝图中,右键搜索 TakeDamage
  2. 连接 Event AnyKey 到 TakeDamage(10.0f)
  3. 运行游戏,按键后,观察输出日志
    在这里插入图片描述
    在这里插入图片描述

现在蓝图可以调用 C++ 方法了!

4️⃣ C++ 调用蓝图事件

有时候,我们希望在 C++ 中调用蓝图实现的功能,比如播放 UI 效果、生成特效等

🔹 在 C++ 定义 BlueprintImplementableEvent

📌 让蓝图实现 OnHealthChanged() 事件

UFUNCTION(BlueprintImplementableEvent, Category = "Character Events")
void OnHealthChanged();

🔹 在 TakeDamage() 触发蓝图事件

📌 修改 TakeDamage(),调用 OnHealthChanged()

void APlayerCharacter::TakeDamage(float DamageAmount)
{Health -= DamageAmount;UE_LOG(LogTemp, Warning, TEXT("玩家受伤,当前血量:%f"), Health);OnHealthChanged();  // 触发蓝图事件
}

🔹 在蓝图实现 OnHealthChanged()

  1. 打开 BP_PlayerCharacter 蓝图
  2. 在 Event Graph 里找到 OnHealthChanged
  3. 打印Health
    在这里插入图片描述
    在这里插入图片描述

现在 C++ 可以调用蓝图事件了!

5️⃣ 让蓝图继承 C++ 类

🔹 在 C++ 创建一个可继承的 Weapon 类

📌 Weapon.h

#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Weapon.generated.h"UCLASS(Blueprintable)
class MYGAME_API AWeapon : public AActor
{GENERATED_BODY()
};

📌 Blueprintable 让蓝图可以继承该类

🔹 在蓝图创建 Weapon 子类

  1. 在 UE5 Content Browser,右键 Weapon 类
  2. 选择 Create Blueprint Class Based on Weapon(创建基于Weapon的蓝图类)
  3. 命名为BP_Weapon
  4. 为 BP_Weapon 添加模型 & 逻辑
  5. 拖到关卡中使用

✅ 现在蓝图可以继承 C++ 代码,扩展游戏逻辑!

6️⃣ C++ 调用蓝图函数

📌 如果蓝图中有 Fire() 方法,C++ 也可以调用

UFUNCTION(BlueprintCallable, Category = "Weapon")
void Fire();

📌 在 C++ 调用蓝图中的 Fire()

if (Weapon)
{Weapon->Fire();
}

现在 C++ 可以调用蓝图方法了!

🎯 总结

✅ C++ 变量 & 方法暴露给蓝图(UPROPERTY()、UFUNCTION())
✅ C++ 触发蓝图事件(BlueprintImplementableEvent)
✅ 蓝图继承 C++ 类,扩展游戏逻辑(Blueprintable)
✅ C++ 可以调用蓝图的函数(BlueprintCallable)

🎮 **C++ + 蓝图结合开发,让游戏既高效又强大!**🚀

相关文章:

第 14 天:UE5 C++ 与蓝图(Blueprint)交互!

🎯 目标: ✅ 了解 C 与蓝图(Blueprint)交互的方式 ✅ 在 C 中调用蓝图函数 ✅ 让蓝图访问 C 变量和方法 ✅ 使用 UFUNCTION、UPROPERTY 进行蓝图暴露 ✅ 提高开发效率,让 C 和蓝图开发者高效协作 1️⃣ 为什么要让 C…...

小初高各学科教材,PDF电子版下载

链接:https://pan.quark.cn/s/7c2125f648e2 小初高中电子课本资料pdf合集 高中各科教材 (部分举例) - 语文:新人教版、旧人教版、苏教版等 - 数学:人教A版、沪教版、鄂教版等 - 英语:重大版、人教版…...

Trader Joe‘s EDI 需求分析

Trader Joes成立于1967年,总部位于美国加利福尼亚州,是一家独特的零售商,专注于提供高质量且价格合理的食品。公司经营范围涵盖了各类杂货、冷冻食品、健康食品以及独特的本地特色商品。 EDI需求分析 电子数据交换(EDI&#xff…...

python class详解

在 Python 中,class 是用来创建新的数据类型,即对象的蓝图。类可以包含属性(变量)和方法(函数),它们定义了对象的状态和行为。以下是 Python 类的基本概念和用法的详细解释: 定义类…...

基于LVS负载均衡练习

对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势。 NAT模式,全称是网络地址转换模式。NAT模式下,负载均衡器(Director)会修改请求和响应的IP地址。客户端的请求先到达Director,Director将请…...

在 rtthread中,rt_list_entry (rt_container_of) 已知结构体成员的地址,反推出结构体的首地址

rt_list_entry (rt_container_of)宏定义: /*** rt_container_of - return the start address of struct type, while ptr is the* member of struct type.*/ #define rt_container_of(ptr, type, member) \((type *)((char *)(ptr) - (unsigned long)(&((type *…...

数组_二分查找

数组_二分查找 一、leetcode-572二、题解1.代码2.思考 一、leetcode-572 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则…...

VUE环境搭建

node.js安装 node npm – node Package Management 安装完成后,需要设置: npm config set prefix "D:\nodejs"注意:“D:\nodejs” 此处为自己安装的node.js路径。管理员身份运行 切换镜像源 npm config set registry https://r…...

MATLAB图像处理:Sobel、Roberts、Canny等边缘检测算子

边缘是图像中像素值剧烈变化的区域,反映了目标的轮廓、纹理等关键信息。边缘检测是图像分割、目标识别等任务的基础。本文将系统解析 六种经典边缘检测算子 的数学原理、实现方法及适用场景,并给出完整的MATLAB代码示例和对比分析。 1. 边缘检测基础 1…...

C++ 标准库常见容器

容器类型类型分类特点示例代码vector序列容器动态数组,支持随机访问,末尾操作效率高std::vector v {1, 2, 3}; v.push_back(4);deque序列容器双端队列,支持两端操作和随机访问std::deque d {1, 2, 3}; d.push_front(0);list序列容器双向链表…...

Ubuntu+Laravel+MQ+Supervisor队列系统搭建流程

1、安装MQ环境 sudo apt install -y rabbitmq-server sudo systemctl enable rabbitmq-server --now 2、进入laravel项目,安装MQ队列驱动 composer require vladimir-yuldashev/laravel-queue-rabbitmq 3、配置 .env QUEUE_CONNECTIONrabbitmq RABBITMQ_HOST12…...

力扣100. 相同的树(利用分解思想解决)

Problem: 100. 相同的树 文章目录 题目描述思路Code 题目描述 思路 题目要求判断两个二叉树是否完全相同,而此要求可以利用问题分解的思想解决,即判断当前节点的左右子树是否完全相同,而在二叉树问题分解的一般题目中均会带有返回值&#xff…...

全面了解HTTP(一)

全面了解HTTP(二)-CSDN博客 web及网络基础 使用HTTP协议访问web: HTTP: 网络基础TCP/IP 与HTTP关系密切的协议:IP,TCP,DNS 负责域名解析的DNS服务 各种协议与HTTP协议的关系 URI和URL 简单的HTTP协议 HTTP协议用于客户端和服…...

element-ui时间组件同一个月内选择/30天内选择

element-ui时间组件同一个月内选择/30天内选择 同一个月 <el-date-picker v-model"time" type"datetimerange"range-separator"至" start-placeholder"开始时间"value-format"timestamp" :picker-options"pickerO…...

NO.18十六届蓝桥杯备战|循环嵌套|乘法表|斐波那契|质数|水仙花数|(C++)

循环嵌套 循环嵌套的使⽤ while &#xff0c; do while &#xff0c; for &#xff0c;这三种循环往往会嵌套在⼀起才能更好的解决问题&#xff0c;就是我们所说的&#xff1a;循环嵌套。这三种循环都可以任意嵌套使⽤ ⽐如&#xff1a; 写⼀个代码&#xff0c;打印⼀个乘法⼝…...

深入浅出Java反射:掌握动态编程的艺术

小程一言反射何为反射反射核心类反射的基本使用获取Class对象创建对象调用方法访问字段 示例程序应用场景优缺点分析优点缺点 注意 再深入一些反射与泛型反射与注解反射与动态代理反射与类加载器 结语 小程一言 本专栏是对Java知识点的总结。在学习Java的过程中&#xff0c;学习…...

大模型被偷家?CNN结合多模态!

2025深度学习发论文&模型涨点之—— CNN多模态 卷积神经网络是一种特殊类型的神经网络&#xff0c;其主要结构包括卷积层、池化层、全连接层和输出层。卷积层通过卷积操作学习图像的特征&#xff0c;池化层通过下采样操作减少参数数量&#xff0c;全连接层和输出层通过分类…...

UI自动化测试的优缺点?

优点 • 提高测试效率&#xff1a;可以快速地重复执行测试用例。例如&#xff0c;对于一个有大量表单需要验证的网页应用&#xff0c;自动化测试可以在短时间内完成多次输入检查&#xff0c;而手动测试则会花费大量时间。 • 保证测试一致性&#xff1a;每次执行测试的步骤和…...

在 Kubernetes (K8s) 环境中,备份 PostgreSQL 数据库

在 Kubernetes (K8s) 环境中&#xff0c;备份 PostgreSQL 数据库有一些特殊的考虑&#xff0c;因为数据库通常运行在容器中&#xff0c;并且数据存储在卷&#xff08;如 PersistentVolume&#xff09;中。你可以通过几种方式在外部备份 PostgreSQL 数据库&#xff0c;下面是一些…...

机器视觉中的3d和2d的区别

在机器视觉中&#xff0c;3D和2D的主要区别体现在数据的维度、处理方式及应用场景上。以下是具体对比&#xff1a; 数据维度 2D视觉 &#xff1a;处理二维图像&#xff0c;仅包含宽度和高度信息&#xff0c;通常以像素矩阵表示。 3D视觉 &#xff1a;处理三维数据&#xff0c;…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...