Actor,字面意思是演员,这个名词,用在引擎里表示可以 Spawn 到世界中的对象,感觉怪怪的,为什么不直接取名xx对象,不是更直观吗?比如SpawnObject?

这个问题问得很好。"Actor"确实怪,但这个名字不是 Epic 随便取的,它背后有计算机科学传统历史渊源


1. 因为 “Object” 已经被占用了

UE 中真正的"万物之祖"是 UObject(所有能反射的类的基类)。

class UObject { ... };           // 根对象:材质、贴图、组件、甚至蓝图资产本身都是 UObject
class AActor : public UObject { ... };  // 能放进世界的对象

如果可放置对象叫 Object,那就和 UObject 重名了。所以 Epic 需要另一个词来区分:

  • UObject = 内存中的对象(编辑器资产、组件、数据结构)
  • AActor = 世界中的对象(关卡里的实体)

2. “Actor” 来自计算机科学的「Actor 模型」

这是最关键的原因。

Actor Model(演员模型) 是 1973 年由 Carl Hewitt 提出的一种并发计算理论。它的核心思想:

系统中的每个实体都是一个 Actor,Actor 之间不共享内存,只能通过发送消息来通信。

Actor A                Actor B
   │                      │
   │── 发送消息 "攻击" ──→│
   │                      │
   │←── 发送消息 "受伤" ──│

这和 UE 的设计惊人地相似:

Actor 模型的概念 UE 中的体现
Actor 接收消息 Event BeginPlayOnOverlap
Actor 发送消息 CastGet All ActorsEvent Dispatch
Actor 独立运行 每个 Actor 有自己的 Tick
Actor 可以创建子 Actor SpawnActor

Epic 的创始人 Tim Sweeney 是计算机科学背景出身,UE1(1998 年)就采用了 Actor 这个术语,很可能直接受到了 Actor 模型的影响


3. 戏剧/电影的隐喻

“Actor” 在英文里就是"演员"。从这个角度理解,它其实很贴切:

现实世界 UE 世界
舞台(Stage) 关卡(Level)
导演(Director) 游戏模式(GameMode)
演员(Actor) 场景中的实体(Actor)
演员的道具 Actor 的组件(Component)
演员入场 SpawnActor
演员退场 DestroyActor

在这个隐喻里,关卡是一场戏,每个 Actor 都是一个有独立行为、能与其他 Actor 互动的表演者


4. 其他引擎的命名对比

每个引擎选择了不同的词:

引擎 可放置对象叫 直观程度
Unity GameObject(游戏对象) ⭐⭐⭐ 最直观
Godot Node(节点) ⭐⭐⭐ 也很直观
CryEngine Entity(实体) ⭐⭐⭐ 直观
UE Actor(演员) ⭐⭐ 抽象,但有学术渊源

Unity 选择 GameObject 是因为它面向的是"游戏开发"这个具体场景,命名更平民化。
UE 选择 Actor 是因为它面向的是更底层的对象系统架构,命名更学术化。


5. 那为什么不用 SpawnObject

UE 里确实有创建 UObject 的函数,叫 NewObject<T>()。而 SpawnActor 是专门针对 AActor 的:

// 在内存里创建一个 UObject(比如创建一个新的材质实例)
UMaterialInstanceDynamic* Mat = NewObject<UMaterialInstanceDynamic>(...);

// 在世界里创建一个 AActor(生成一个敌人)
AActor* Enemy = GetWorld()->SpawnActor<AEnemy>(...);
  • NewObject = 纯内存操作,和世界无关
  • SpawnActor = 在世界中"诞生"一个实体,给它位置、赋予生命

如果把 AActor 叫 Object,那 SpawnObject 就会和 NewObject 混淆,无法区分"放进世界"和"内存分配"的区别。


总结

问题 答案
为什么不叫 Object? 因为 UObject 已经占用了
为什么叫 Actor? 来自计算机科学的 Actor 模型(并发消息传递)
为什么不更直观? UE 的命名偏学术/架构向,Unity 的 GameObject 更直观
这个名字合理吗? 从"Actor 模型"和"戏剧隐喻"角度看,其实挺合理的

你可以把 Actor 理解为 “世界中的参与者” 而不是"演员",这样就好接受多了。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐