Actor

概述

Actor是一种基本类型的对象,您可以将它放到世界中或者可以在世界中生成 它。关于Actor的一个很好的简介是“可以更新的一群组件”。实际上,Actor可以做很多 事情;请查看 Actor.h 获得其包含的所有变量及函数。

一般,不会对Actor进行垃圾回收,因为World Object存放了一个Actor引用列表。通过调用 Destroy() ,可以显式地销毁Actor。这样会从关卡中删除该Actor,并将其标记为 “待销毁”状态,这意味着直到下一次垃圾回收清理它们之前,这些Actor仍然存在。

Actor 创建

创建新的 AActor 类实例的过程称为 生成 。这个处理可以通过使用通用的 SpawnActor() 函数或者其中一个专用的模板版本来完成。

请参照 生成 Actors 页面获得关于为游戏创建 AActor 类的实例的各种方法的详细信息。

组件

在某种意义上,您可以把 Actors 想象成为一个容器,它存放了特殊类型的 对象 ,称为组件 。您可以使用不同类型的组件来控制如何移动 Actors 、 如何渲染Actor等。Actors 的另一个主要功能是游戏过程中在网络上 复制
属性和函数调用。

当创建组件时,组件和包含它们的Actor相关联。

几种主要类型的组件包括:

UActorComponent

这是组件基类。它可以作为Actor的一部分。如果您想更新它则可以更新它。

USceneComponent

这个组件是“物理上实际存在”的东西,因为它可以存在于世界中。SceneComponents具有变换,这意味着它们可以到处移动及和世界中的其他东西 进行交互。在附加物层次结构中,它们也可以连接到一起。

UPrimitiveComponent

这个组件不仅可以存在于世界中,同时具有某种形式的表示(比如一个网格物体或粒子系统)。很多有趣的物理和碰撞设置 都在这里处理。

Actor可以具有层次结构化的SceneComponent。每个 Actor 也具有一个 RootComponent 属性,指出了哪个组件作为该 Actor 的根组件。Actors 本身没有变换,所以它们不具有位置、旋转度、 或缩放比例信息。但是,它们可以依赖于它们组件的变换;更确切地讲,是它们的根组件。如果这个组件是 SceneComponent ,那么它将为 该 Actor 提供变换信息。否则, Actor 将没有变换。其他的附加组件的变换是相对于它们所附加到的组件的。

Actor及其层次结构的示例可能如下所示:

GoldPickup Actor 层次结构
GoldPickupExampleActor.png
  • Root(根组件) - SceneComponent: 设置Actor在世界中的基础位置的基本场景组件。

    • StaticMeshComponent(静态网格物体组件): 代表金矿石的网格物体。

      • ParticleSystemComponent(物理系统组件): 附加到金矿石上的火花粒子发射器。

      • AudioComponent(音频组件): 附加到金矿石上的金属敲击响声循环音频发射器。

      • BoxComponent(盒体组件): 碰撞盒体,用作为拾取金子时重叠事件的触发器。

Ticking(更新)

Ticking(更新) 是指在虚幻引擎中对象如何更新。所有对象每帧都可以更新,使您可以执行任何更新计算或者必要的动作。

默认情况下, Actor 都可以通过 TickActor() 函数进行更新。引擎每帧会执行一次该函数。

ActorComponents 默认也可以进行更新。请参照组件页面的更新部分 获得更多信息。

复制

Replication(复制) 在多玩家网络游戏中,用于保持世界中的玩家同步。属性值和调用都可以进行复制,从而可以完全地 控制所有客户端上的游戏的状态。