22.

UE5のコンポーネントとは|種類とActor/Scene Componentの違い

編集
この記事の要点
  • コンポーネントは、アクター(Actor)に機能を付け足すための「部品」です。メッシュ表示・当たり判定・移動・カメラ・音などの役割を1つずつ担い、組み合わせてアクターを構成します。
  • 大きく2系統あります。トランスフォーム(位置・回転・スケール)を持たない Actor Component と、トランスフォームを持ち階層に組み込める Scene Component です。
  • 各アクターには1つのルートコンポーネントがあり、その位置がアクター自身の位置になります。ルートは Scene Component 系である必要があります。
  • 追加方法はエディタ(詳細パネルの「コンポーネントを追加」)と C++ コンストラクタの2通りが基本です。
  • 付けすぎ・ルート未設定・トランスフォーム継承の見落としが、典型的なつまずきポイントです。

コンポーネントとは

Unreal Engine 5(UE5)におけるコンポーネント(Component)とは、アクター(Actor)に機能を付け足すための部品です。1つのアクターを「土台(器)」とすると、そこへメッシュ表示・当たり判定・移動処理・カメラ・音といった役割を、コンポーネントという小さな部品単位で取り付けていくイメージになります。

この考え方はコンポジション(合成)と呼ばれます。すべての機能を1つの大きなクラスに継承で詰め込むのではなく、必要な機能をもったコンポーネントを組み合わせてアクターを作るため、機能の再利用がしやすく、見通しのよい設計につながりやすいとされています。たとえば「3Dモデルを表示する部品」「ぶつかり判定をする部品」「動きを制御する部品」をそれぞれ取り付ければ、それらが連携して1体のキャラクターやオブジェクトとして振る舞います。

クラス階層の観点では、すべてのコンポーネントの基底は UActorComponent です。ここに位置情報(トランスフォーム)を加えたものが USceneComponent、さらに見た目や物理的な実体(ジオメトリ・コリジョン)を加えたものが UPrimitiveComponent という関係になっており、メッシュ系やシェイプ系のコンポーネントは UPrimitiveComponent を継承しています。

主なコンポーネントの種類

UE5には数多くの組み込みコンポーネントが用意されています。代表的なものを用途とともに整理します。分類名は理解の助けとしての目安で、実装上はいずれも前述のクラス階層のいずれかに属します。

分類コンポーネント例主な用途
基礎(位置のみ)Scene Componentトランスフォーム(位置・回転・スケール)を持つ最小単位。見た目を持たず、他のコンポーネントを取り付ける土台や位置の基準(ピボット)として使う。
メッシュ表示Static Mesh Component変形しない3Dモデルを表示する。建物・地形・小道具など、骨組み(スケルトン)を持たない静的なジオメトリ向け。
メッシュ表示Skeletal Mesh Componentボーン(骨)とアニメーションを伴うモデルを表示する。キャラクターなど、変形・動作するメッシュ向け。
当たり判定Box / Sphere / Capsule Collision箱・球・カプセル形状の単純なコリジョン。重なり(Overlap)やヒット(Hit)の検出に使う。キャラクターのルートにはカプセルがよく使われる。
移動Movement Component(例: CharacterMovement、ProjectileMovement、FloatingPawnMovement)アクターやポーンの移動・落下・重力などの挙動を計算して反映する。役割により複数の種類がある。
カメラCamera Component / Spring Arm Component視点(ビュー)を定義する。Spring Arm は障害物を避けつつ一定距離を保つ「腕」として、三人称視点などでカメラと組み合わせて使う。
Audio Component効果音・環境音・BGMなどのサウンドを再生する。位置を持つため、距離による減衰など空間的な再生にも対応する。
照明Light Component(Point / Spot / Directional / Rect など)シーンに光源を追加する。点光源・スポット・平行光源など種類があり、用途に応じて使い分ける。
パーティクルNiagara / Particle System Component炎・煙・魔法エフェクトなどのビジュアルエフェクトを再生する。
抽象的な機能Actor Component(カスタム含む)位置を必要としない処理(ステータス管理、インベントリ、独自ロジックなど)をまとめる。トランスフォームを持たない。

このほかにも物理コンストレイント、デカール、テキストレンダリングなど多数の組み込みコンポーネントがあり、C++ や Blueprint で独自コンポーネントを作成することもできます。具体的な仕様や追加された種類はバージョンによって異なるため、利用中の版では公式ドキュメントの確認をおすすめします。

Actor Component と Scene Component の違い

コンポーネントを理解するうえで最も重要なのが、トランスフォーム(位置・回転・スケール)を持つかどうかという区別です。

  • Actor Component(UActorComponent: トランスフォームを持ちません。ワールド上の「場所」という概念がないため、見た目や当たり判定のような空間的な表現には向きません。代わりに、移動ロジック・インベントリ・属性管理など、位置に依存しない抽象的な機能をまとめるのに適しています。位置を持たないため、後述の階層(親子関係)にも組み込めません。
  • Scene Component(USceneComponent: Actor Component を拡張し、トランスフォームを持ちます。ワールド上の位置・回転・スケールを表現できるため、コンポーネント同士を親子でアタッチ(接続)して階層を作れます。カメラ、スプリングアーム、音、各種メッシュやコリジョンなど、場所に関係する機能はすべてこの系統に属します。

言い換えると、「ワールドのどこにあるか」を表現する必要があるならば Scene Component 系、純粋な計算やデータ管理だけならば Actor Component で十分、という整理になります。メッシュやコリジョンが Scene Component 系に含まれるのは、それらが USceneComponent を継承した UPrimitiveComponent をさらに継承しているためです。

コンポーネントの追加方法

アクターへコンポーネントを取り付ける方法は、大きく2通りあります。

エディタから追加する

Blueprint やレベル上のアクターを開き、詳細パネル(またはコンポーネントパネル)の「コンポーネントを追加(Add Component)」から、一覧で目的のコンポーネントを選びます。ノードを書かずに視覚的に構成でき、追加後はパネル上でドラッグして親子関係を組み替えることもできます。プロトタイプや、デザイナーとの協業がしやすい方法です。

C++ コンストラクタで追加する

C++ では、アクターのコンストラクタ内で CreateDefaultSubobject を使ってコンポーネントを生成します。次の例では、メッシュをルートにし、その下にカメラを取り付けています。

// アクターのコンストラクタ内
UStaticMeshComponent* MeshComp =
    CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
RootComponent = MeshComp;                 // ルートに設定

UCameraComponent* CameraComp =
    CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
CameraComp->SetupAttachment(RootComponent); // ルートの子として接続

SetupAttachment は、コンストラクタの段階で親子関係を予約するための関数です。実行中(ゲームプレイ中)に動的に取り付ける場合は、AttachToComponent など別の関数を用います。なお関数の細かな仕様はバージョンで変わることがあるため、正確な引数や挙動は公式 API リファレンスを確認してください。

階層とルートコンポーネント

Scene Component は親子で接続でき、これをコンポーネント階層と呼びます。親のトランスフォームを基準として子の位置が決まり、親を動かせば子も一緒に動きます。たとえば車のアクターで、車体メッシュを親、4つの車輪メッシュを子にしておけば、車体を動かすだけで車輪もまとまって移動します。

各アクターには、階層の頂点となるルートコンポーネント(RootComponent)が必ず1つ存在します。ルートコンポーネントのトランスフォームが、そのままアクター自身のワールド位置として扱われる点が重要です。つまり「アクターを動かす」とは、実際にはルートコンポーネントを動かすことを意味します。

ルートには位置情報が必要なため、ルートに設定できるのは Scene Component 系のみです。位置を持たない Actor Component はルートにできません。見た目を伴わないアクターでは、素の Scene Component をルートにして位置の基準とし、その下に必要な部品をぶら下げる構成がよく使われます。

落とし穴・注意点
  • ルートに Actor Component を指定できない: ルートには位置が必要です。トランスフォームを持たない Actor Component をルートにしようとしても機能しません。見た目のないアクターでも、まず素の Scene Component をルートに置くのが定石です。
  • トランスフォームは親から継承される: 子コンポーネントの位置・回転・スケールは、親を基準とした相対値です。親を回転・拡大すると子もその影響を受けます。「子だけ動かしたつもりが全体がずれる」「親のスケールでメッシュが伸びる」といった現象は、この継承関係の見落としが原因のことが多いです。
  • コンポーネントの付けすぎ: 多数のメッシュ・ライト・物理シミュレーションを1アクターに詰め込むと、描画や計算の負荷が増える要因になります。必要な部品だけに絞り、不要なものは削除する設計が望ましいとされています。
  • 用途に合わない系統の選択: 位置が不要な処理に Scene Component を使うと無駄な階層が増え、逆に空間的な表現を Actor Component で行おうとすると位置を扱えず行き詰まります。「場所を持つか否か」で系統を選ぶことが大切です。

よくある質問(FAQ)

Q. コンポーネントとアクターはどう違いますか?

アクターはレベル(ワールド)に配置できる単位そのもので、コンポーネントはそのアクターに取り付けて機能を与える部品です。アクターが「器」、コンポーネントが「中身の機能」と考えると整理しやすく、コンポーネント単体でレベルに直接配置することはできません。

Q. メッシュを表示したいのですが、どのコンポーネントを使えばよいですか?

変形しない静的なモデル(建物・小道具など)なら Static Mesh Component、ボーンとアニメーションを伴うモデル(キャラクターなど)なら Skeletal Mesh Component が基本です。どちらも位置を持つ Scene Component 系なので、階層に組み込んだり、ルートにしたりできます。

Q. 移動やインベントリのような「位置を持たない処理」はどのコンポーネントにまとめるべきですか?

トランスフォームを必要としない抽象的な処理は、Actor Component(必要に応じて自作のカスタムコンポーネント)にまとめるのが適しています。位置を持たないぶん階層に組み込む必要がなく、複数のアクターで再利用しやすくなります。移動については、用途に応じた専用の Movement Component が用意されている点も押さえておくとよいでしょう。

まとめ

UE5のコンポーネントは、アクターに機能を付け足すための部品であり、組み合わせ(コンポジション)によって柔軟にオブジェクトを構成するための仕組みです。最大の分かれ目はトランスフォームの有無で、位置を持たない Actor Component と、位置を持ち階層に組み込める Scene Component に大別されます。各アクターにはルートコンポーネントが1つあり、その位置がアクターの位置になること、ルートは Scene Component 系であることを押さえておくと、追加方法や階層構造、典型的な落とし穴の理解がスムーズになります。細かな仕様はバージョンによって異なる場合があるため、実装時は利用中の版の公式ドキュメントもあわせて確認することをおすすめします。

編集
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. セーブ&ロード

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