UE C++开发需遵循引擎规则:类须继承UE基类并用UCLASS等宏声明,变量函数用UPROPERTY/UFUNCTION暴露给蓝图,内存由引擎管理,修改后需编译热重载,调试用UE_LOG或VS附加进程。

在Unreal Engine 4/5中使用C++不是“写个类就能运行”的简单事,而是要理解UE的反射系统、对象生命周期和编辑器集成机制。核心在于:用UE的宏(如UCLASS、UPROPERTY)告诉引擎“这个类/变量需要被识别”,否则编辑器看不到、蓝图调不了、甚至运行时会崩溃。
从C++类开始:别直接写普通C++类
UE不认标准C++类。所有要参与游戏逻辑的类,必须继承自UE基础类(如AActor、UObject、UActorComponent),并用UE宏声明:
-
必须加
UCLASS():放在类声明前,让引擎生成反射数据; -
类名建议以A(Actor)、U(Object/Component)、F(Struct)或T(Template)开头,比如
AMyCharacter、UHealthComponent; -
构造函数里要用
PrimaryActorTick.bCanEverTick = true才能启用Tick(); -
不要手动
new或deleteUE对象——用GetWorld()->SpawnActor或() Destroy()由引擎管理内存。
暴露变量和函数给蓝图:靠UPROPERTY和UFUNCTION
想在蓝图里拖线、设默认值、调用函数?光写public不行,得加宏:
-
UPROPERTY(EditAnywhere, BlueprintReadWrite):变量能在细节面板修改、蓝图读写; -
UPROPERTY(VisibleDefaultsOnly):只在类默认值里显示,实例中不可改; -
UFUNCTION(BlueprintCallable):函数可在蓝图中调用; -
UFUNCTION(BlueprintPure):纯函数(无副作用),可作节点返回值; - 参数也要加
UPARAM标签(如UPARAM(ref))才能传引用给蓝图。
编译与热重载:别跳过这步,否则代码不生效
UE的C++代码不会自动加载。每次改完必须:
立即学习“C++免费学习笔记(深入)”;
- 保存所有.cpp/.h文件;
- 切换回UE编辑器,它会自动触发编译(状态栏右下角有提示);
- 若没反应,手动点菜单:Build → Build Solution(需先用VS打开.sln);
- 编译成功后,编辑器会热重载——场景中已存在的实例也会更新逻辑(但部分改动仍需重启);
- 报错?看Output Log里的红色信息,多数是宏漏了、头文件没include、或类没加
GENERATED_BODY()。
调试技巧:别只靠PrintString
UE提供了比UE_LOG更直观的调试方式:
-
UE_LOG(LogTemp, Warning, TEXT("Value: %f"), MyFloat);输出到Output Log; - 在VS里打断点,用“附加到进程”调试(选UnrealEditor.exe);
- 用
DrawDebugLine()、DrawDebugSphere()在视口中画辅助图形; - 右键C++类 → “Generate C++ Class” 是最安全的起点,自动配好模板和路径;
- 新建C++类时,确保“Add to Project”勾选,且父类选对(比如要挂组件选
UActorComponent,不是AActor)。
基本上就这些。UE C++不是C++加个引擎壳,而是用一套约定好的规则,让C++和蓝图、编辑器、序列化系统协同工作。把宏用对、生命周期理清、编译流程走顺,入门门槛就跨过去了。










