タイトル: コンポーネント
SEOタイトル: UE5のコンポーネントとは|種類とActor/Scene Componentの違い
| この記事の要点 |
|---|
|
コンポーネントとは
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 をルートにして位置の基準とし、その下に必要な部品をぶら下げる構成がよく使われます。
| 落とし穴・注意点 |
|---|
|
よくある質問(FAQ)
Q. コンポーネントとアクターはどう違いますか?
アクターはレベル(ワールド)に配置できる単位そのもので、コンポーネントはそのアクターに取り付けて機能を与える部品です。アクターが「器」、コンポーネントが「中身の機能」と考えると整理しやすく、コンポーネント単体でレベルに直接配置することはできません。
Q. メッシュを表示したいのですが、どのコンポーネントを使えばよいですか?
変形しない静的なモデル(建物・小道具など)なら Static Mesh Component、ボーンとアニメーションを伴うモデル(キャラクターなど)なら Skeletal Mesh Component が基本です。どちらも位置を持つ Scene Component 系なので、階層に組み込んだり、ルートにしたりできます。
Q. 移動やインベントリのような「位置を持たない処理」はどのコンポーネントにまとめるべきですか?
トランスフォームを必要としない抽象的な処理は、Actor Component(必要に応じて自作のカスタムコンポーネント)にまとめるのが適しています。位置を持たないぶん階層に組み込む必要がなく、複数のアクターで再利用しやすくなります。移動については、用途に応じた専用の Movement Component が用意されている点も押さえておくとよいでしょう。
まとめ
UE5のコンポーネントは、アクターに機能を付け足すための部品であり、組み合わせ(コンポジション)によって柔軟にオブジェクトを構成するための仕組みです。最大の分かれ目はトランスフォームの有無で、位置を持たない Actor Component と、位置を持ち階層に組み込める Scene Component に大別されます。各アクターにはルートコンポーネントが1つあり、その位置がアクターの位置になること、ルートは Scene Component 系であることを押さえておくと、追加方法や階層構造、典型的な落とし穴の理解がスムーズになります。細かな仕様はバージョンによって異なる場合があるため、実装時は利用中の版の公式ドキュメントもあわせて確認することをおすすめします。