在C++类中使用PrintString函数

本文探讨了为何大部分程序员难以转型为架构师,并通过一个示例介绍了如何使用KismetSystemLibrary来调用PrintString方法输出文本。文章指出,虽然技术实现细节被提及,但核心议题集中在职业发展的障碍上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,需要引入头文件:

#include "Kismet/KismetSystemLibrary.h"

使用如下方法调用PrintString:

UKismetSystemLibrary::PrintString(this, TEXT("Hello world!"));

转载于:https://my.oschina.net/sjmm/blog/736661

<think>嗯,用户现在的问题是想在蓝图项目中创建C++,需要教程。之前已经回答过如何在UE中新建C++,但用户可能遇到了具体在蓝图项目中的问题。首先,我需要回顾之前的回答,确保没有遗漏关键点。 用户提到的是蓝图项目,这项目默认可能没有C++支持。所以第一步应该是确认项目是否已经添加了C++支持。如果用户的项目最初是使用蓝图创建的,可能需要手动添加C++文件来初始化。比如通过文件菜单中的“新建C++”选项,这时候UE会自动生成必要的C++项目文件,并编译。这一步可能用户之前没有操作过,所以需要详细说明。 接下来,用户可能需要具体的步骤,比如如何通过内容浏览器创建新,选择父,命名规范等。需要强调大驼峰命名法,以及路径不能有特殊字符,这些容易导致编译错误的地方。还要提醒用户编译完成后,可能需要重启编辑器或者等待编译完成才能正确使用。 另外,引用中提到了蓝图和C++的交互,比如使用UFUNCTION和UPROPERTY宏来暴露函数和变量到蓝图。用户可能在创建C++后,希望与蓝图结合使用,这部分需要补充说明,例如如何在蓝图中调用C++函数,或者如何在C++中访问蓝图节点。 还要注意用户可能在创建C++时遇到编译错误,比如模块依赖问题,这时候需要指导用户修改.build.cs文件,添加相应的模块引用。比如,如果用户使用了UMG模块,需要在PublicDependencyModuleNames中添加“UMG”。 最后,根据用户之前的回答,生成相关问题,帮助用户深入理解。比如如何暴露函数给蓝图,如何处理编译错误,如何实现C++和蓝图的继承关系等。这些相关问题需要结合引用中的内容,确保覆盖用户可能遇到的后续问题。</think>### Unreal Engine 蓝图项目创建 C++ 完整教程 --- #### **步骤 1:为蓝图项目添加 C++ 支持** 如果项目最初是**纯蓝图项目**(未包含任何 C++ 代码),需先初始化 C++ 支持: 1. 打开项目后,点击菜单栏 **文件 > 新建 C++ ** 2. 选择任意父(如 `Actor`),输入名(如 `DummyClass`)并创建 3. UE 会自动生成 `.sln` 解决方案文件并触发首次编译[^1] $$ \text{关键操作:通过创建首个C++激活项目编程支持} $$ --- #### **步骤 2:创建自定义 C++ ** 1. **方法一:通过编辑器界面** - 点击菜单栏 **文件 > 新建 C++ ** - 选择父(如 `Actor`、`Pawn` 或 `UObject`) - 输入名(遵循大驼峰命名,如 `MyBlueprintInteraction`) - 点击 **创建**,等待编译完成 2. **方法二:手动添加文件** - 在项目目录的 `Source/ProjectName/Public` 和 `Private` 中分别创建 `.h` 和 `.cpp` 文件 - 示例头文件 `MyClass.h`: ```cpp #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyClass.generated.h" // 必须包含生成头文件 UCLASS() class MYPROJECT_API AMyClass : public AActor { GENERATED_BODY() public: AMyClass(); UFUNCTION(BlueprintCallable, Category="Custom") // 暴露给蓝图 void PrintMessage(FString Message); }; ``` --- #### **步骤 3:实现 C++ 与蓝图交互** 1. **暴露函数到蓝图** 使用 `UFUNCTION(BlueprintCallable)` 或 `BlueprintImplementableEvent`: ```cpp // MyClass.h UFUNCTION(BlueprintCallable, Category="Custom") void ToggleVisibility(bool bIsVisible); // MyClass.cpp void AMyClass::ToggleVisibility(bool bIsVisible) { SetActorHiddenInGame(!bIsVisible); } ``` 2. **在蓝图中调用 C++ 函数** - 在蓝图中搜索 C++ 名,拖入节点调用已暴露的函数[^2] - 示例:通过按钮事件触发 `ToggleVisibility` --- #### **步骤 4:验证与调试** 1. **编译检查** - 若出现 `Unresolved external symbol` 错误,检查函数是否实现 - 若缺少模块依赖,修改 `YourProject.Build.cs` 文件: ```cpp PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG" }); ``` 2. **蓝图集成测试** - 将 C++ 拖入场景或创建蓝图子 - 通过 `PrintString` 或断点调试验证逻辑[^3] --- ### 关键注意事项 1. **命名规范** - 名前缀需匹配父型(如 `A` 对应 `Actor`,`U` 对应 `UObject`) - 避免使用保留关键字(如 `Object`、`Character`) 2. **热重载限制** - 修改 C++ 代码后需手动编译(快捷键:Ctrl+Alt+F11),蓝图支持热重载但 C++ 需重启编辑器 3. **混合编程优势** - 性能敏感逻辑用 C++ 实现(如物理计算、AI) - 快速原型设计用蓝图(如动画状态机、UI 流程) --- ### 相关问题 1. 如何在 C++ 中调用蓝图定义的事件? 2. 如何修复 "Class not found" 的编译错误? 3. UEC++ 如何实现组件化设计?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值