Wiki
709 words
4 minutes
虚幻结构
Updated 2025-06-10

概念#

Actor#

演员类,对应到Unity中的GameObject 但是我们可以在Unreal中自己定义并编写 Actor C++类

ActorComponent#

设置#

在通用设置中,我们可以设置热重载以及,创建C++类后自动编译的选项(建议关掉)。

这篇想回答什么#

“虚幻结构”更适合从整体视角看 Unreal,而不是只记单个类。

尤其是从 Unity 迁移过来时,最容易困惑的是:

  • 为什么类这么多
  • 为什么控制逻辑和表现逻辑要拆开
  • 为什么很多能力不是挂在对象上,而是分散在 Controller、GameMode、Subsystem 里

所以这里更像是一张 Unreal 的结构地图。

核心对象关系#

可以先记住这条主线:

UObject -> Actor -> Pawn -> Character

以及另一条控制链:

GameMode -> Controller -> Pawn

再配合运行时服务层:

这样看 Unreal 会清楚很多。

几个核心层级#

对象层#

控制层#

规则层#

  • GameMode:当前关卡的规则与生成逻辑
  • GameState / PlayerState:更偏运行时状态同步

全局服务层#

常见模块分层#

一个比较顺手的理解方式是:

  • 表现:动画、特效、音频、UI
  • 实体:Actor、Character、Component
  • 控制:Controller、BehaviorTree、输入系统
  • 规则:GameMode、关卡流程
  • 全局:GameInstance、Subsystem、存档、资源加载

这比“记每个类是干嘛的”更重要,因为工程上你写代码时面对的是分层,而不是单点概念。

从 Unity 迁移时的理解路径#

如果带着 Unity 思维来学 Unreal,我会建议按这条顺序理解:

  1. 先搞懂 ActorActorComponent
  2. 再看 PawnCharacterController
  3. 然后看 GameModeGameInstanceSubSystem
  4. 最后再看行为树、动画蓝图、资源加载这些具体系统

原因很简单:底层对象关系没搞懂,后面的系统都会像碎片。

工程上的几个结论#

  • Unreal 更强调“职责拆分”,不是把所有逻辑塞进一个对象
  • 反射系统是整套工具链的基础,不只是给编辑器看的
  • 世界内对象、控制逻辑、全局系统三者一定要分开理解
  • 热重载和自动编译可以用,但反射结构改动时要谨慎

设置建议#

在编辑器设置里,自动编译和热重载虽然方便,但对 C++ 项目并不总是稳定。

经验上:

  • 小改动可以用 Live Coding
  • 改反射声明、组件结构、继承关系时,优先完整编译

这部分也和 UnrealHandTools虚幻文件夹管理 有关系。

虚幻结构
https://fuwari.vercel.app/wiki/unreal/虚幻结构/
Author
Qingswe
Published at
2025-06-10
License
CC BY-NC-SA 4.0