在Unreal Editor中生成C++ Actor类需右键内容浏览器→“新建C++类”→选Actor为父类→命名(如AMyInteractableActor)→点击“创建类”,UE自动生成含UCLASS()、构造函数等的.h/.cpp模板,随后必须点击编辑器“编译”按钮完成反射注册。

在 Unreal Editor 里怎么生成 C++ Actor 类文件
虚幻引擎不会自动为你创建可编译的 C++ Actor 类,必须通过编辑器菜单触发代码生成流程,否则手动新建 .h/.cpp 文件会导致 UCLASS() 无法被反射系统识别,编译后在编辑器里根本看不到这个类。
- 在内容浏览器右键 → “新建 C++ 类”,不要选 Blueprint Class,要选
Actor作为父类 - 输入类名(如
AMyInteractableActor),确保勾选 “将类添加到新蓝图中”(方便后续可视化调试) - 点击“创建类”,Unreal 会自动生成带正确宏、头文件包含和构造函数的 .h/.cpp 模板
- 生成后必须重新编译——哪怕只是空类,不编译就无法在世界大纲视图或细节面板里使用
AMyActor 的最小必要结构长什么样
删掉模板里所有注释和默认组件(比如 USceneComponent 的 RootComponent 初始化),只保留最简骨架,否则容易因未初始化导致运行时崩溃或编辑器卡死。
- 头文件中必须有
UCLASS()宏,且ClassGroup和Category建议显式指定,否则蓝图中找不到该类 -
RootComponent必须在构造函数中设置,例如:RootComponent = CreateDefaultSubobject(TEXT("DefaultSceneRoot")); - 不要在构造函数里调用
GetWorld()或访问关卡对象——此时世界尚未加载,会返回空指针 - 若需添加静态网格体,用
CreateDefaultSubobject,并手动设为(TEXT("Mesh")) RootComponent或附加到它
为什么改完代码后蓝图里没更新或报 Class not found
常见原因是类名、路径或模块依赖没对齐,不是代码写错了,而是构建系统没把新类纳入反射扫描范围。
- 检查
.Build.cs文件是否已将新类所在目录加入PublicIncludePaths(通常自动生成会处理,但移动文件后容易漏) - 确认类声明在正确的模块头文件里(比如放在
MyGame.h或模块私有目录下,避免跨模块引用未导出类) - 如果类名含下划线或小写字母开头(如
amyspecialactor),编辑器可能忽略——C++ 类名必须以大写字母 A 开头,且符合AMyClass命名惯例 - 修改后务必点击编辑器顶部的 “编译”按钮(不是 VS 里的 Build),否则反射数据不会刷新,蓝图中仍显示旧类或完全消失
想让 Actor 在编辑器里支持拖拽放置和属性编辑,要加哪些宏
仅靠 UCLASS() 不够,关键字段必须用 UPROPERTY() 显式标记,否则变量不可见、不可序列化、也不参与蓝图通信。
- 公开变量:加
UPROPERTY(EditAnywhere, BlueprintReadWrite),比如UPROPERTY(EditAnywhere) float Health; - 只读但需显示:用
UPROPERTY(VisibleAnywhere),适合组件引用(如UStaticMeshComponent*) - 避免直接暴露原始指针类型给蓝图,优先用
UPROPERTY()包裹的UObject*子类指针 - 如果变量是数组或结构体,确保其元素类型也支持反射(例如自定义
USTRUCT()需加USTRUCT(BlueprintType))
编辑器里拖进场景后,属性面板是否出现对应字段,是检验 UPROPERTY 是否生效的最快方式。漏标一个,那个参数就永远灰掉。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











