17.

UE5のアクター(Actor)とは|役割・継承関係・ライフサイクル

編集

Unreal Engine 5(UE5)のアクター(Actor)とは、レベルに配置したり、ゲーム実行中にスポーン(生成)したりできる、ゲーム内のあらゆるオブジェクトの基底クラスです。キャラクター、地形、ライト、カメラ、トリガー領域など、レベルに存在して位置・回転・スケールを持つものは、基本的にすべてこのアクターを継承しています。プログラム上はAActorというクラスで表現され、クラス名の先頭に付く「A」はアクターを継承していることを示す命名規則です。

この記事の要点
  • アクターは、レベルに配置・スポーンできるオブジェクトの基底クラスであり、UE5のゲーム世界を構成する最小単位の一つです。
  • アクター自体は機能を直接持たず、コンポーネントを組み合わせて見た目や挙動を与える「入れ物(コンテナ)」として設計されています。
  • クラスの継承関係は UObjectAActorAPawnACharacter という流れが基本です。
  • アクターには Spawn → BeginPlay → Tick → EndPlay → Destroy という大まかなライフサイクルがあります。
  • レベルへの直接配置と、実行中のスポーンの両方で生成できます。

アクター(Actor)とは何か

UE5でゲームを作るとき、画面に映るものや当たり判定を持つもの、音を鳴らす発生源、プレイヤーが操作する対象など、レベル(ステージ)の中に「存在するもの」は、ほぼすべてアクターとして扱われます。アクターはトランスフォーム(位置・回転・スケール)を持ち、レベル上のどこに、どの向きで、どの大きさで存在するかを表現できます。

アクターは抽象的な基底クラスであるため、何もしないアクターをそのまま置いても、見た目や当たり判定は基本的にありません。実際の役割は、後述するコンポーネントを追加したり、アクターを継承した専用クラス(キャラクターやライトなど)を使ったりすることで与えられます。つまりアクターは、ゲーム内オブジェクトに共通する「レベルに存在する」「生成・破棄される」「毎フレーム更新されうる」といった性質をまとめた土台と理解すると分かりやすいでしょう。

アクターは「コンポーネントを持つ入れ物」である

UE5の設計で重要なのは、アクター本体はあくまでコンポーネントをまとめる入れ物であり、具体的な機能はコンポーネントが担うという考え方です。コンポーネント(Component)は、メッシュ表示・当たり判定・ライト・カメラ・音といった個別の機能を提供する部品で、アクターに取り付けて使います。

多くのアクターは、基準となる1つのルートコンポーネントを持ち、その下に他のコンポーネントをツリー状にぶら下げます。ルートコンポーネントのトランスフォームがアクター全体の基準位置となり、子コンポーネントはそれを基準とした相対的な位置に配置されます。代表的なコンポーネントには次のようなものがあります。

  • StaticMeshComponent:動かない立体物(建物・小道具など)の見た目を表示します。
  • SkeletalMeshComponent:ボーンを持ち、アニメーションするメッシュ(キャラクターなど)を表示します。
  • コリジョン系コンポーネント:球・カプセル・ボックスなどの形状で当たり判定や重なり判定を行います。
  • ライト系コンポーネント:ポイントライト・スポットライト・ディレクショナルライトなどの光源を提供します。
  • CameraComponent:視点を提供し、そのアクターからの見え方を定義します。

このように、必要な機能のコンポーネントを選んで組み合わせることで、同じアクターという基盤から、見た目だけのオブジェクトから複雑に動くキャラクターまで、幅広いオブジェクトを作り分けられます。逆に言えば、アクター単体には特定の機能が組み込まれていないからこそ、用途に応じて自由に部品を足し引きできる柔軟さがあるとも言えます。コンポーネントを部品として共通化しておけば、複数のアクターで同じ機能を再利用でき、開発の効率や保守性の向上にもつながります。

主なアクターの例

UE5には、アクターを継承してあらかじめ役割が与えられたクラスが多数用意されています。代表的なものを挙げます。

クラス(例)主な役割
StaticMeshActor動かない立体物を配置するためのアクター。建物・地形パーツ・小道具などに使われます。
APawn(ポーン)プレイヤーやAIが「乗り移って(Possess)」操作できるアクター。操作対象の基本となります。
ACharacter(キャラクター)ポーンを拡張し、二足歩行の移動機能や当たり判定用カプセルなどを標準で備えたアクター。
ライト系アクターポイントライト・スポットライト・ディレクショナルライトなど、シーンを照らす光源アクター。
カメラ系アクター視点や撮影位置を定義するアクター。シネマティックや固定視点などに利用されます。
トリガー系アクター見えない領域として配置し、プレイヤーなどが重なったことを検知してイベントを発生させるアクター。

これらは一例であり、プロジェクトの目的に応じて、これらを継承した独自のアクターを作成するのが一般的です。

アクターの継承関係

UE5のクラスは、すべての基盤となるUObjectから派生しています。その中でも、レベルに配置できるオブジェクトとしての性質を加えたのがAActorです。さらに、操作可能なオブジェクト、歩行可能なキャラクターへと、役割を足しながら派生していきます。基本的な流れは次の表のとおりです。

クラス位置づけと主な追加要素
UObjectUE5のほぼすべてのクラスの基底。リフレクションやガベージコレクションの仕組みを提供しますが、それ自体はレベルに配置できません。
AActorUObjectを継承し、レベルへの配置・スポーン、トランスフォーム、コンポーネントの保持、ライフサイクルなどの性質を追加したクラス。
APawnAActorを継承し、コントローラーによる操作(Possess)に対応したクラス。プレイヤーやAIの操作対象になります。
ACharacterAPawnを継承し、歩行・ジャンプなどの移動処理やカプセル状の当たり判定を標準で備えたクラス。人型キャラクターによく使われます。

このように、下位のクラスほど用途が具体的になり、上位の性質をすべて受け継いだうえで機能が追加されています。自作クラスを作る際は、目的に最も近いクラスを継承元として選ぶことで、必要な機能を再利用できます。

アクターのライフサイクル

アクターは、生成されてから破棄されるまでに、いくつかの段階を経ます。これをライフサイクルと呼び、それぞれの段階で特定の関数やイベントが呼ばれます。代表的な流れは次のとおりです。

  • Spawn(生成):アクターが世界に作り出される段階です。レベルへの配置によるものと、実行中のスポーンによるものがあります。この時点でコンストラクタなどの初期化が行われます。
  • BeginPlay:ゲームプレイが始まり、アクターが世界で動き始めるときに一度呼ばれます。コンポーネントの初期化が済んだ後に呼ばれるため、ゲーム開始時の初期設定を書く場所として使われます。
  • Tick:毎フレーム呼ばれる更新処理で、前フレームからの経過時間(デルタタイム)を受け取れます。継続的な移動や監視などに使います。なお、Tickはアクターの設定(PrimaryActorTick.bCanEverTickなど)で有効化されている場合に呼ばれます。
  • EndPlay:アクターが世界から取り除かれる、またはゲームプレイが終了するときに呼ばれます。理由を表す値が渡され、後片付けに利用できます。
  • Destroy(破棄):アクターを明示的に取り除くときに呼び出します。アクターは破棄予定として印が付けられ、レベルの管理対象から外されます。実際のメモリ解放はガベージコレクションのタイミングで行われます。

これらの段階を理解しておくと、初期化処理はBeginPlay、毎フレームの処理はTick、後片付けはEndPlayといったように、書くべきコードの置き場所を適切に選べるようになります。

配置とスポーン

アクターを世界に登場させる方法は、大きく2通りあります。

  • レベルへの配置(エディタ配置):エディタ上でレベルにアクターをドラッグして置く方法です。あらかじめ存在が決まっている地形・建物・固定の小道具・初期配置のキャラクターなどに向いています。配置されたアクターは、レベルの読み込みとともに世界に現れます。
  • 実行中のスポーン:ゲーム実行中に、プログラムやブループリントから新しいアクターを生成する方法です。敵の出現、発射した弾、拾えるアイテムなど、状況に応じて動的に増減するオブジェクトに向いています。生成位置・回転などを指定して作り出せます。

どちらの方法でも、生成された後はライフサイクルに従って動作します。固定的なものは配置、動的に増減するものはスポーン、と使い分けるのが基本的な考え方です。配置とスポーンは排他的なものではなく、同じ種類のアクターを、初期配置はエディタで行い、追加分は実行中にスポーンするといった併用も一般的です。スポーンを多用する場合は、生成・破棄の回数が増えると負荷の要因になりやすいため、頻繁に使い回すアクターはあらかじめ生成しておき、必要に応じて再利用する設計が検討されることもあります。

よくある落とし穴

落とし穴注意点
コンポーネントが無いと見えないアクターを置いただけでは見た目も当たり判定もありません。メッシュやコリジョンなどのコンポーネントを追加して初めて、画面に表示され、相互作用できるようになります。
Tickの使いすぎによる負荷Tickは毎フレーム呼ばれるため、多数のアクターで重い処理を行うと処理落ちの原因になります。必要なアクターだけTickを有効化し、毎フレーム不要な処理はイベントやタイマーに置き換えることが推奨されます。
Destroy後の参照破棄したアクターを参照し続けると、不正な参照による不具合の原因になります。破棄の可能性があるアクターを参照する際は、参照が有効かどうかを確認してから使うのが安全です。

FAQ

Q. アクターとコンポーネントは何が違いますか。
A. アクターはレベルに配置・スポーンできる「入れ物」で、それ自体が世界に存在する単位です。一方コンポーネントは、メッシュ表示や当たり判定といった個別の機能を提供する部品で、単独でレベルに置くのではなく、アクターに取り付けて使います。アクターという土台に、必要なコンポーネントを組み合わせて1つのオブジェクトを構成する、という関係です。

Q. ポーンとキャラクターはどう使い分ければよいですか。
A. ポーンはコントローラーによって操作できるアクターの基本形で、移動の方法は決められていません。乗り物や独自の移動をするものに向いています。キャラクターはポーンを拡張し、歩行・ジャンプなどの移動処理やカプセル状の当たり判定を標準で備えているため、人型のように地面を歩くキャラクターに向いています。

Q. 初期化の処理はコンストラクタとBeginPlayのどちらに書くべきですか。
A. 大まかには、ゲームプレイ開始時に行いたい初期化はBeginPlayに書くのが基本です。BeginPlayはコンポーネントの初期化が済み、世界に登場した状態で呼ばれるため、他のアクターとの連携など、ゲーム実行時の状態を前提とした処理に適しています。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ノード・コンポーネント・関数・クラス一覧
  2. Tips
  3. エラー一覧
  4. ブループリント (Blueprint)
  5. プロジェクト (Project)
  6. レベル (Level)
  7. ウィジェット (Widget)
  8. データテーブル (DataTable)
  9. アセット
  10. アウトライナー
  11. ビュー
  12. レイヤー
  13. レイアウト
  14. ビルド
  15. ライティング
  16. ジオメトリ
  17. アクタ
  18. トランスフォーム
  19. スナップ
  20. ピボット
  21. コンテンツドロワー
  22. コンポーネント
  23. メッシュ
  24. マテリアル
  25. World Composition
  26. World Partition
  27. Unreal Insights
  28. セーブ&ロード

最近更新/作成されたページ