10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[初心者向け]プログラマー視点で理解するUnreal Engineの基本構造

10
Last updated at Posted at 2025-12-14

この記事は ラクスパートナーズ Advent Calendar 2025 の15日目の記事です。

はじめに

これは私がUnreal Engineを勉強するにあたって、「最初に知っておけば良かった」と思ったことをまとめたものです。

プログラミング経験があり、オブジェクト指向についてもなんとなく理解している人は、UEを触る前にこの記事の内容を押さえておくと、その後の学習がスムーズになるかもしれません。

これから勉強する人の役に立てば幸いです。

対象読者

  • JavaやPythonなど、C系以外の言語でプログラミング経験がある
  • オブジェクト指向についてなんとなく理解している

このような方を想定しています。

Unreal Engineの世界はクラスでできている

クラス階層を俯瞰する

まずは以下のクラス継承図を見てください。

UObject(すべての祖先)
│
├── AActor(ワールドに配置できるもの)
│   ├── APawn(プレイヤーやAIが操作できるもの)
│   │   └── ACharacter(人型キャラクター)
│   ├── AController(Pawnを操作する側)
│   │   ├── APlayerController
│   │   └── AAIController
│   ├── AGameModeBase(ゲームルールを管理)
│   └── その他のアクタ(ライト、カメラ、トリガーなど)
│
└── UActorComponent(アクタに付ける部品)
    └── USceneComponent(位置情報を持つ部品)
        └── UPrimitiveComponent(描画・当たり判定を持つ部品)

これらはUnreal Engineに登場するクラスの一部です。実際にはもっと多くのクラスがありますが、ここでは主要なものだけをピックアップしました。

命名規則について
クラス名の先頭にある UA はプレフィックスです。A は AActor を継承したクラス、U は AActor 以外の UObject を継承したクラスを表します。

アクタとコンポーネント

UEのクラスは大きく アクタ(Actor)コンポーネント(Component) に分かれます。

アクタは、レベル(ゲームのマップだと思ってください)に配置できるオブジェクトの基底クラスです。

  • Pawn:プレイヤーやAIが操作できるもの
  • Character:Pawnを継承した人型キャラクター向けのクラス
  • Controller:Pawnを操作するロジックを担当
  • GameMode:ゲームのルールを管理

ライトやカメラもアクタです。一方、ControllerやGameModeもアクタですが、これらは目に見える形でレベルに配置されることはありません。

コンポーネントは、アクタに付与できる部品です。

アクタ ─┬─ StaticMeshComponent(3Dモデルの見た目)
        ├─ CapsuleComponent(当たり判定)
        └─ AudioComponent(サウンド再生)

コンポーネントもクラスなので、「アクタにコンポーネントを付与する」とは、アクタのインスタンスがコンポーネントのインスタンスを保持する(コンポジション)ということです。

C++では、UPROPERTYマクロ付きのメンバ変数としてコンポーネントのポインタを宣言し、コンストラクタでCreateDefaultSubobjectを使ってインスタンスを生成します。

// MyActor.h
UCLASS()
class AMyActor : public AActor
{
    GENERATED_BODY()

public:
    AMyActor();

    // コンポーネントをメンバ変数として宣言
    UPROPERTY(VisibleAnywhere)
    UStaticMeshComponent* MeshComponent;

    UPROPERTY(VisibleAnywhere)
    UAudioComponent* AudioComponent;
};
// MyActor.cpp
AMyActor::AMyActor()
{
    // コンストラクタでコンポーネントを生成して紐づける
    MeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComponent"));
    RootComponent = MeshComponent;

    AudioComponent = CreateDefaultSubobject<UAudioComponent>(TEXT("AudioComponent"));
    AudioComponent->SetupAttachment(RootComponent);
}

このように、オブジェクト指向の観点からは「アクタがコンポーネントをメンバとして持つ」というシンプルな構造です。

エディタ画面との対応

ここまでの説明が、実際のUnreal Engineエディタでどのように表現されるか見てみましょう。

スクリーンショット 2025-12-14 121252.png

スクリーンショット 2025-12-14 172447.png

番号 名称 説明
ビューポート クラスをインスタンス化したオブジェクトが視覚的に配置される空間
アウトライナー レベル内のオブジェクト一覧。「Type」列がクラス名を表す
アクタ ビューポートに表示されている BP_ThirdPersonCharacter0 というアクタのインスタンス
コンポーネント アウトライナーから特定のアクタを選択するとDetailsパネルにコンポーネントが表示されます

アウトライナーに表示されるものは、レベル自体を除き、すべてクラスをもとにしたインスタンス(オブジェクト)です。

まとめ

Unreal Engineの初心者向け解説の多くは非プログラマー向けに書かれており、アクタやコンポーネントを抽象的な概念として説明しています。

しかし、オブジェクト指向を理解していれば「結局はすべてクラスとそのインスタンスなのだ」と捉えることができます。

私自身、最初は「UE独自のまったく新しい概念」だと思い込んでしまい、なかなか深く理解できませんでした。同じような経験をしている方の参考になれば幸いです。

より深く理解したい方は、以下のキーワードも調べてみてください。

  • コンポジション:オブジェクトが他のオブジェクトを保持する設計
  • コンポーネント指向:機能を部品として分離する設計思想
  • Entity Component System(ECS):ゲームエンジンでよく使われるアーキテクチャパターン

宣伝

わたくし、ゲーム制作系VTuberとして活動しています。
UnrealEngineでのゲーム制作風景や進捗報告動画、他にもいろいろやっているのでもしよかったら見に来てください。

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?