unreal-engine-cpp-pro - SKILL name: unreal-engine-cpp-prodescription: “Expert guide for Unreal Engine 5.x C development, covering UObject hygiene, performance patterns, and best practices.”risk: safesource: selfdate_added: “2026-02-27”Unreal Engine C Pro此技能提供使用 C 进行 Unreal Engine 5 开发的专家级指南。它专注于编写健壮、高性能且符合标准的代码。何时使用在以下情况使用此技能为 Unreal Engine 5.x 项目开发 C 代码时编写 Actors、Components 或 UObject 派生类时优化 Unreal Engine 中的性能关键代码时调试内存泄漏或垃圾回收问题时实现暴露给蓝图的函数时遵循 Epic Games 的编码标准和约定时使用 Unreal 的反射系统UCLASS、USTRUCT、UFUNCTION时管理资源加载和软引用时不要使用此技能的情况使用纯蓝图项目无 C 代码时为 5.x 之前的 Unreal Engine 版本开发时使用非 Unreal 游戏引擎时任务与 Unreal Engine 开发无关时核心原则UObject 与垃圾回收始终对UObject*成员变量使用UPROPERTY()确保它们被垃圾回收器GC跟踪。如果你需要在 UObject 图之外保持根引用使用TStrongObjectPtr但通常优先使用addToRoot()。理解IsValid()检查与nullptr的区别。IsValid()能安全地处理 pending kill 状态。Unreal 反射系统使用UCLASS()、USTRUCT()、UENUM()、UFUNCTION()将类型暴露给反射系统和蓝图。尽可能减少BlueprintReadWrite对于不应被 UI/关卡蓝图中的逻辑随意修改的状态优先使用BlueprintReadOnly。性能优先Tick默认禁用 TickingbCanEverTick false。只在绝对必要时启用。优先使用计时器GetWorldTimerManager()或事件驱动逻辑。类型转换避免在热循环中使用CastT()。在BeginPlay中缓存引用。结构体 vs 类对数据密集、非 UObject 的类型使用F结构体以降低开销。命名约定严格遵循 Epic Games 的编码标准模板前缀T如TArray、TMap。UObject前缀U如UCharacterMovementComponent。AActor前缀A如AMyGameMode。SWidget前缀SSlate 控件。结构体前缀F如FVector。枚举前缀E如EWeaponState。接口前缀I如IInteractable。布尔值前缀b如bIsDead。常见模式1. 健壮的组件查找避免在Tick中使用GetComponentByClass。在PostInitializeComponents或BeginPlay中执行。voidAMyCharacter::PostInitializeComponents(){Super::PostInitializeComponents();HealthCompFindComponentByClassUHealthComponent();check(HealthComp);// Fail hard in dev if missing}2. 接口实现使用接口解耦系统如交互系统。// Interface call checkif(TargetActor-ImplementsUInteractable()){IInteractable::Execute_OnInteract(TargetActor,this);}3. 异步加载软引用对大型资源避免使用硬引用UPROPERTY(EditDefaultsOnly) TSubclassOfAActor它们会强制加载顺序。使用TSoftClassPtr或TSoftObjectPtr。UPROPERTY(EditAnywhere,BlueprintReadWrite)TSoftClassPtrAWeaponWeaponClassToLoad;voidAMyCharacter::Equip(){if(WeaponClassToLoad.IsPending()){WeaponClassToLoad.LoadSynchronous();// Or use StreamableManager for async}}调试日志使用带自定义类别的UE_LOG。DEFINE_LOG_CATEGORY_STATIC(LogMyGame,Log,All);UE_LOG(LogMyGame,Warning,TEXT(Health is low: %f),CurrentHealth);屏幕消息if(GEngine)GEngine-AddOnScreenDebugMessage(-1,5.f,FColor::Red,TEXT(Died!));Visual Logger对 AI 调试极为有用。实现IVisualLoggerDebugSnapshotInterface。提交 PR 前检查清单此 Actor 需要 Tick 吗能否用计时器所有UObject*成员是否都用UPROPERTY包装硬引用TSubclassOf是否导致加载链能否改为软指针是否在EndPlay中清理了已绑定的委托限制仅在任务与上述范围明确匹配时使用此技能。不要将输出视为环境特定验证、测试或专家审查的替代品。如果缺少必要的输入、权限、安全边界或成功标准请停下来询问澄清。