UE5 C++与蓝图交互完全指南
创作时间:
作者:
@小白创作中心
UE5 C++与蓝图交互完全指南
引用
CSDN
1.
https://blog.csdn.net/m0_37643873/article/details/145626869
在Unreal Engine 5中,C++与蓝图(Blueprint)的交互是游戏开发中的重要环节。本文将详细介绍如何实现C++与蓝图的交互,包括在C++中暴露变量和方法给蓝图,以及如何让蓝图访问C++变量和调用C++方法。此外,还将介绍C++调用蓝图事件和函数的方法,以及蓝图继承C++类的方式。
目标
- 了解C++与蓝图(Blueprint)交互的方式
- 在C++中调用蓝图函数
- 让蓝图访问C++变量和方法
- 使用UFUNCTION、UPROPERTY进行蓝图暴露
- 提高开发效率,让C++和蓝图开发者高效协作
为什么要让C++与蓝图交互?
在Unreal Engine 5中,C++提供强大的底层逻辑,而蓝图更适合快速调整游戏玩法。C++ + 蓝图结合开发 = 既有性能,又有灵活性!
常见C++与蓝图交互方式:
- C++定义变量 & 方法 → 蓝图访问 & 调用
- C++调用蓝图事件 & 函数
- C++创建蓝图子类
- 蓝图扩展C++逻辑(继承C++类)
在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面板归类
在蓝图中访问变量
- 打开UE5,找到PlayerCharacter
- 右键PlayerCharacter选择Create Blueprint Class Based on PlayerCharacter(创建基于PlayerCharacter的蓝图类)
- 命名BP_PlayerCharacter,双击打开BP_PlayerCharacter
- 在Details面板修改Health
- 在Event Graph里读取Health并打印出来
现在蓝图可以访问C++变量了!
在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);
}
在蓝图中调用方法
- 在PlayerCharacter蓝图中,右键搜索TakeDamage
- 连接Event AnyKey到TakeDamage(10.0f)
- 运行游戏,按键后,观察输出日志
现在蓝图可以调用C++方法了!
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()
- 打开BP_PlayerCharacter蓝图
- 在Event Graph里找到OnHealthChanged
- 打印Health
现在C++可以调用蓝图事件了!
让蓝图继承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子类
- 在UE5 Content Browser,右键Weapon类
- 选择Create Blueprint Class Based on Weapon(创建基于Weapon的蓝图类)
- 命名为BP_Weapon
- 为BP_Weapon添加模型 & 逻辑
- 拖到关卡中使用
现在蓝图可以继承C++代码,扩展游戏逻辑!
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++ + 蓝图结合开发,让游戏既高效又强大!
热门推荐
手机桌面快捷方式的设置方法指南
教你轻松设置手机桌面壁纸,适用于Android和iPhone用户
专家推荐:甲硝唑碘伏联合使用,告别脚臭
大学生睡眠问题调查:八成学生曾失眠,专家建议建立规律作息
睡眠困扰六成人,专家详解呼吸心理助眠法
世界睡眠日:安全岛等三大助眠技术助你睡个好觉
睡前泡脚15分钟,轻松改善睡眠质量
新婚红包封面怎么写?最火祝福语来了!
“福宝”事件引发关注,官方辟谣旅外大熊猫遭虐待
官方回应旅外大熊猫争议:生活状况良好,合作成果显著
吸附性义齿使用指南:谁适合?如何更舒适?
新型全口义齿采用吸附固位,舒适度与固位力大幅提升
缺钱缺枪缺人,四川多地野猪猎捕工作陷入停滞
牙齿缺失会导致牙槽骨萎缩?三种修复方案详解
牙槽骨吸收严重也能用!吸附性义齿破解老人缺牙难题
登上B站热榜,迷你世界靠玩家创意收获百万笑声
迷你世界入门完全指南:基础操作、资源获取与模式解析
迷你世界2025年1月激活码公布,内含多个永久码
我的世界VS迷你世界:全球沙盒游戏双雄全方位对比
《僵尸先生》角色设计与关卡攻略大揭秘
暗喻幻想:ReFantazio
揭秘龙之谷魔导师:掌控元素与时间的战场智者,团队不可或缺的输出与控制核心
备战四六级:运动饮食心理睡眠四大维度调适指南
汤姆索亚:从顽童到英雄的三重冒险
广东“小洱海”:清远桃花湖旅游攻略
下好“绣花功夫” 守护“绿色国宝”
清远“庭”美的,处处藏着“好村光”!这些路线等你来打卡→
总有一种创意存钱罐设计适合你!
儿童倒睫:从症状识别到治疗护理的完整指南
专家:儿童倒睫可先家庭护理,严重需手术治疗