アクタ

基本的なゲームプレイ要素であるアクタとオブジェクトの説明です。

アクタ は、レベル内へ配置可能な任意のオブジェクトで、カメラ、スタティック メッシュ、プレイヤースタート位置などがあります。アクタはトランスレーション、回転、スケーリングなどの 3D 変形をサポートします。アクタはゲームプレイ コード (C++ またはブループリント) を通して作成 (スポーン)、破壊することができます。

C++ において AActor は全てのアクタの基本クラスになります。

アクタにトランスフォーム (位置、回転、スケール) データは直接含まれません。アクタのルート コンポーネントのトランスフォーム データがある場合は、それが使われます。

アクタの作成

AActor クラスのインスタンスの新規作成を、スポーンする といいます。スポーンは、一般的な SpawnActor() 関数、あるいは特別にテンプレート化されたものを使って行います。

ゲームプレイ用に AActor クラスのインスタンスを作成する様々な方法については「アクタをスポーンおよび破壊する」を参照してください。

コンポーネント

アクタ はある意味、コンポーネント と呼ばれる特別なタイプの オブジェクト を保持するコンテナとして考えられます。様々なタイプのコンポーネントを使って、 アクタの移動、レンダリング方法を制御することができます。アクタのその他の主要な機能は、 ゲーム中にネットワーク上でプロパティと関数コールを レプリケーション することです。

コンポーネントは作成されると、それに含まれるアクタと関連づけられます。

コンポーネント タイプをいくつか紹介します。

  • UActorComponent : これは基本のコンポーネントです。アクタの一部として含まれます。必要であれば、ティック することもできます。ActorComponents は特定のアクタに関連づいていますが、ワールドでは特定の位置に存在しているわけではありません。一般的には、AI やプレイヤー入力のインタープリットなど、概念的な機能に使われます。

  • USceneComponent : このコンポーネントはトランスフォームをもつ ActorComponents です。トランスフォームとは、位置、回転、スケールで定義されるワールド内の位置のことです。SceneComponents は、階層的にお互いをアタッチすることができます。階層のルートである SceneComponent を元にアクタの位置、回転、スケールを行います。

  • UPrimitiveComponent : このコンポーネントは、何種類かのグラフィックス (メッシュ、パーティクル システムなど) をもつ SceneComponents です。ここで、物理とコリジョンにいろいろな設定ができます。

アクタは SceneComponents の階層をもつようにサポートされています。それぞれのアクタ には、どのコンポーネントが アクタ のルートの役割をするのかを指定する RootComponent プロパティがあります。アクタ 自体はトランスフォームを持たないので、 位置、回転、スケールはありません。その代わり、アクタはコンポーネント、具体的には ルート コンポーネントのトランスフォームに依存します。このコンポーネントが SceneComponent の場合、 アクタにトランスフォーム情報を与えます。これがないと、アクタはトランスフォームを持ちません。その他のアタッチされたコンポーネントは、アタッチ先のコンポーネントに関連しタトランスフォームを持ちます。

アクタと階層の例は、以下のようになります。

GoldPickup アクタ

階層

GoldPickupExampleActor.png

  • Root - SceneComponent: ワールドにアクタの基本位置を設定するための基本的なシーン コンポーネント

    • StaticMeshComponent: 金鉱を表すメッシュ

      • ParticleSystemComponent: 金鉱にアタッチされたキラキラ光るパーティクル エミッタ

      • AudioComponent: 金鉱にアタッチされたループするメタルの鐘の音

      • BoxComponent: オーバーラップ イベントがゴールドを広いあげるトリガーとして使うコリジョン ボックス

ティック

ティック は、Unreal Engine でオブジェクトがどのようにアップデートされたかを表します。すべてアクタには、各フレームでティックあるいは最低限、ユーザー定義の間隔でティックする機能があり、必要な更新の計算やアクションを行うことができます。

アクタ はすべて、TickActor() 関数を使ってデフォルトでティックされた状態にすることができます。

ActorComponent もデフォルトで更新をかけることができます。ただし、これを行うには TickComponent() 関数を使用します。詳細については、 詳細は、「更新」を参照してください。

ライフサイクル

アクタの作成方法およびゲームからの削除方法については、「アクタのライフサイクル」を参照してください。

レプリケーション

レプリケーション は、ネットワーク経由のマルチプレイヤー ゲームを処理する際に、アクタをワールドに同期して維持するために使います。プロパティ値と関数コールは両方ともレプリケートが可能なので、 全てのクライアント上のゲームのステートを完全に制御することができます。

アクタを破壊する

ワールド オブジェクトがアクタ リファレンスのリストを保有しているので、アクタは一般的にガーベジ コレクションではありません。アクタは Destroy() を呼び出すことにより、明確に破壊することができます。アクタは破壊されると、レベルから削除され、「キルの保留状態」としてマークされます。 つまり、次のガーベジ コレクション上で整理されるまで、そこに残されることを意味します。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル