UE5 C++ 脚本常用父类:生命周期、常用属性/函数/委托速览

前言 在 UE5 C++ 开发里,“选对父类”几乎决定了脚本的生命周期、可放置位置、初始化时机,以及你能用到哪些系统能力(输入、碰撞、网络复制、UI、动画等)。 这篇文章按“实战常用频率”整理: 常见父类分别适合做什么。 每类对象的核心生命周期顺序。 常用属性、函数和委托(含高频回调)。 说明:本文聚焦入门和日常开发高频内容,细节会因引擎版本和项目架构(单机/联机)略有差异。 1. UObject:一切反射对象的基础 适用场景 纯数据对象 工具类对象 不需要直接出现在场景中的逻辑对象 生命周期要点 Constructor:构造默认值。 PostInitProperties:属性初始化后调用。 BeginDestroy / FinishDestroy:销毁流程。 常用属性/函数 GetWorld():部分上下文可用,不是所有 UObject 都有有效世界。 GetOuter():获取所属外部对象。 IsValid()(配合对象指针检查):避免访问失效对象。 常见委托 UObject 本身没有像 Actor 那样丰富的生命周期委托,但可以参与你自定义的动态委托系统。 2. AActor:关卡中最核心的可放置对象 适用场景 场景实体(可见或不可见) 可复制的游戏逻辑载体 挂组件、处理交互、触发器、机关等 生命周期(常见顺序) Constructor OnConstruction(编辑器放置或属性变更后触发) PreInitializeComponents PostInitializeComponents BeginPlay Tick(启用时每帧) EndPlay Destroyed 常用属性 PrimaryActorTick.bCanEverTick:是否允许 Tick。 bReplicates:是否参与网络复制。 NetUpdateFrequency:网络更新频率。 Tags:对象标签,快速分类检索。 常用函数 BeginPlay() / Tick(float DeltaSeconds) / EndPlay() SetActorLocation() / SetActorRotation() / SetActorTransform() Destroy() HasAuthority():联机场景判断服务器权限。 GetComponentsByClass():运行时检索组件。 常见委托 OnActorBeginOverlap OnActorEndOverlap OnTakeAnyDamage OnDestroyed 3. APawn 与 ACharacter:可控制角色核心 3.1 APawn 适用场景 可被 Controller 控制的对象 载具、飞行器、棋子等不一定是“人形角色”的可控实体 生命周期要点 继承 AActor 生命周期,同时常见控制链路是: ...

April 5, 2026 · 2 min

UE5 C++ 脚本的基本类型

前言 在 Unreal Engine 5 的 C++ 开发中,除了标准 C++ 类型,还会频繁接触 UE 自己封装的一套类型系统。本文作为入门草稿,先把最常用、最容易混淆的类型梳理清楚。 1. 数值与布尔类型 UE5 中可以直接使用标准 C++ 基本类型,但官方代码风格更常见的是固定宽度别名: int8 / uint8 int16 / uint16 int32 / uint32 int64 / uint64 float double bool 示例: int32 Health = 100; float MoveSpeed = 600.0f; bool bIsAlive = true; 说明: int32 在 UE 项目中非常常用,跨平台行为更稳定。 uint8 常用于小范围状态值或位标记。 布尔变量通常以 b 开头(如 bIsAlive),是 UE 常见命名习惯。 2. 字符串相关类型 UE 里最常见的文本类型有 3 个:FString、FName、FText。 为什么不建议在 UE5 C++ 脚本里优先用 C++ 原生 std::string: 与 UE 反射系统和编辑器生态耦合较弱,不能直接享受 UPROPERTY、蓝图暴露和常见序列化工作流。 与 UE 常用 API 对接时通常还要频繁做类型转换(std::string <-> FString / FText),会增加样板代码和维护成本。 本地化场景下,FText 有完整的文本管线支持;std::string 更适合纯底层逻辑,不适合直接做玩家可见文本。 UE 社区和官方示例主要围绕 FString、FName、FText,团队协作和排查问题时可读性更高。 FString 可变字符串,适合拼接、调试输出、运行时处理。 类似“通用字符串容器”。 FString PlayerName = TEXT("DaVinci"); FString Msg = FString::Printf(TEXT("玩家: %s"), *PlayerName); FName 不区分大小写语义(底层做了名称表优化)。 适合做标识符、标签、键值名、资源名。 频繁比较时通常比 FString 更高效。 FName SocketName = TEXT("WeaponSocket"); FText 面向本地化显示文本(UI 文本优先用它)。 需要给玩家看的文本,优先考虑 FText。 FText DisplayText = FText::FromString(TEXT("开始游戏")); 3. 常用数学结构体 UE5 提供了大量数学类型,最常见的是: ...

April 5, 2026 · 2 min