虚幻引擎C++游戏框架指南
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/unreal-cpp-gameplay-sh-q5xh25。
技能介绍
为什么要为 UE5 游戏逻辑写对 C++
在 Unreal Engine 5 (UE 5.4+) 中为游戏编写 C++ 时,仅写出能编译的类并不够。为了让类型进入引擎的反射系统,属性能暴露给编辑器与蓝图,行为能跨模块调用,我们需要严格遵守反射宏规则、类命名约定、Gameplay 框架角色划分以及模块依赖声明。任何遗漏——例如忘记包含生成的头文件、遗漏 GC 追踪宏,或者在 Build.cs 中缺少模块依赖——都会导致编辑器中无法识别类型、垃圾回收误删对象,或在链接阶段直接报错。
这个技能的核心工作流
该技能围绕 UE5 原生游戏框架,帮你正确编写和验证 C++ 代码:
- 按类型前缀命名:
A表示 Actor 派生,U表示 UObject/组件派生,F为普通结构体,E为枚举,I为接口。前缀必须与基类匹配。 - 声明反射宏:在类上方使用
UCLASS(),类体第一行写GENERATED_BODY(),并在头文件的最后一行#include "ClassName.generated.h"。 - 暴露数据与行为:使用
UPROPERTY暴露给编辑器和蓝图(并用于 GC 追踪),使用UFUNCTION暴露可调用的行为。 - 构造函数中创建组件:使用
CreateDefaultSubobject创建子对象,并设置RootComponent。 - 明确框架角色:
AGameModeBase负责规则和默认类;APawn/ACharacter是可控身体;APlayerController是玩家意志;UActorComponent是可复用行为。 - 声明模块依赖:在
*.Build.cs中添加所需的模块依赖(例如 EnhancedInput),否则会出现链接错误。
适用边界与注意点
该技能专注于 C++ 类与反射的基础。它不负责处理面向设计师的可视化逻辑(应由蓝图相关技能处理)、玩家输入绑定细节,或 AI 逻辑(应由行为树相关技能处理)。
需要注意的常见坑包括:generated.h 必须放在 include 列表最后;GENERATED_BODY() 必须放在类体第一行;原生 UObject* 必须用 UPROPERTY 或 UE5 的 TObjectPtr 管理,否则 GC 可能销毁对象;Live Coding 仅处理函数体,对头文件和宏的修改需要完整重启并重编译;类前缀写错会破坏 UHT;重写 BeginPlay / Tick 等函数时必须调用 Super::。
使用场景
- 为新的自定义 Actor 或 Character 编写 C++ 类时,需要正确放置 UCLASS、GENERATED_BODY 与 generated.h 的导入顺序
- 想让 C++ 类的属性或函数出现在蓝图编辑器里时,编写 UPROPERTY 和 UFUNCTION 宏并配置可见性
- 在 AGameModeBase 中配置默认 Pawn、PlayerController 等默认类,用于新游戏模式的初始化
- 在项目的 *.Build.cs 中声明 EnhancedInput 等模块依赖,避免编译或链接阶段出现 unresolved symbol
适合人员
- UE5 客户端 C++ 程序员,要在 Source/ 树中编写游戏逻辑类,但不确定反射宏和类前缀规范
- 从蓝图转向 C++ 的玩法程序员,需要把现有 Actor 或角色类改写成 C++ 实现并暴露给蓝图
- 负责搭建项目源码结构的引擎程序员,需要正确配置模块依赖和 Gameplay 框架类层次
- 刚接手 UE5 项目、被链接错误或 GC 问题困扰的 C++ 开发者,想确认反射与头文件规则