用途:该技能为虚幻引擎5.x的C++开发提供专家级指导,聚焦编写健壮、高性能、符合标准的代码。适用触发场景包括:为UE5.x项目开发C++、编写Actor/Component/UObject派生类、优化性能关键代码、排查内存泄漏或垃圾回收问题、实现蓝图可暴露功能、遵循Epic编码规范。
主要能力:
- UObject与垃圾回收:UObject*成员变量使用UPROPERTY()以便被GC追踪;在UObject图外保持根引用可用TStrongObjectPtr<>,但通常更推荐addToRoot();区分IsValid()与nullptr检查。
- 反射系统:用UCLASS()、USTRUCT()、UENUM()、UFUNCTION()将类型暴露给反射与蓝图;尽量少用BlueprintReadWrite,对不应被UI/关卡蓝图改写的数据优先BlueprintReadOnly。
- 命名规范:模板前缀T,UObject前缀U,AActor前缀A,Slate控件前缀S,结构体前缀F,枚举前缀E,接口前缀I,布尔变量前缀b。
- 性能优先:默认关闭Tick(bCanEverTick = false),优先使用计时器GetWorldTimerManager()或事件驱动逻辑;避免在热循环中使用Cast<T>(),在BeginPlay缓存引用;数据型非UObject类型用F结构体降低开销。
- 常见模式:在PostInitializeComponents或BeginPlay中做组件查找而非Tick;用接口解耦系统,通过Implements<UInteractable>()与Execute_OnInteract调用;对大资源用TSoftClassPtr/TSoftObjectPtr避免硬引用造成的加载链。
- 调试:使用UE_LOG配合自定义类别、AddOnScreenDebugMessage、Visual Logger(实现IVisualLoggerDebugSnapshotInterface)。
- PR前检查清单:该Actor是否真需要Tick、是否可用计时器替代;所有UObject*成员是否已用UPROPERTY包裹;硬引用是否造成加载链、能否改为软指针;EndPlay中是否清理已验证委托。
使用方式:先确认用户目标与范围,阅读元数据与来源文件,仅加载能改变结果的相关引用、示例或脚本(如examples/ExampleActor.cpp、examples/ExampleActor.h),执行上游工作流并保持来源边界,用可指认的证据验证结果,任务转向其他领域时移交相关技能,合并前记录所用文件与待验证事项。
限制:仅当任务明确匹配上述范围时使用;输出不能替代特定环境的验证、测试或专家评审;若缺少必要输入、权限、安全边界或成功标准,应停下并请求澄清。