动画插件 Fresh Cooked Tween 入门:让 UE5 动画插值更顺手

前言 在 UE5 日常开发里,我们经常需要做各种“过渡动画”: UI 面板淡入淡出 物体平滑移动和缩放 相机参数渐变 数值从 A 过渡到 B(例如血条、进度条) 这些需求可以用 Timeline、动画蓝图或手写 Tick 实现,但当项目里“轻量过渡动画”越来越多时,代码和蓝图会逐渐分散。Fresh Cooked Tween 这类 Tween 插件的价值,就是把这类逻辑统一成更高复用、可读性更好的工作流。 1. Fresh Cooked Tween 是什么 Fresh Cooked Tween 是面向 Unreal 的 Tween 动画插件,核心目标是: 用更简洁的方式描述“某个值在一段时间内如何变化” 提供常见缓动(Easing)曲线 支持回调与链式组织,降低样板代码 一句话理解:它把“插值过程”从零散的 Tick 逻辑中抽离出来,变成结构化的动画任务。 2. 它解决了什么问题 1) 降低样板代码 手写插值通常要自己管理: 起始值、目标值 已经过时间 每帧更新 完成回调 中途取消/中断 Tween 插件会把这些通用步骤封装好,让你聚焦“做什么动画”,而不是重复“怎么驱动时间”。 2) 统一动画语义 当团队都用统一 Tween 风格时,像“EaseOut、Yoyo、Loop、Delay”这些概念更容易沟通。 3) 适合技术美术协作 对于技术美术和玩法程序协作场景,Tween 非常适合做: UI 动效原型 镜头参数微调 交互反馈(按钮弹性、悬停位移、提示浮动) 3. 核心概念(入门必懂) 无论具体 API 名称如何,Tween 工作流通常都围绕以下概念: ...

April 8, 2026 · 2 min

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