ゲームデザインを加速させる、Unreal Engineの"型"

これは フェンリル デザインとテクノロジー Advent Calendar 2023 18日目の記事です。

こんにちは! GIMLE チームの太田です。

今回はアドベントカレンダーということで、数ヶ月前に趣味で始めたUnreal Engineについて書きます。
取り上げるのは「Gameplay Framework」です!


Unreal Engineには、Gameplay Frameworkと呼ばれる型があり、ゲームの基本的な要素を構成するクラスやコンポーネントをまとめた総称として使われています。
このフレームワークは、ネットワークを通じたマルチプレイヤーゲームが想定されていますが、オフラインで完結するゲームにも使える、便利な型です。

練習用の自作ゲームで実際に使ってみたのですが、一からゲームデザインを考えるよりも、型にゲームの構成要素を当てはめていく方がスムーズに考えることができました。

では、Gameplay Frameworkは実際どのような型なのでしょうか。
クラウドエンジニアとしてはお馴染みの構成図を起点として、少し中身をのぞいてみます。

Gameplay Framework の構成要素

Gameplay Framework の構成要素の配置
Gameplay Framework の構成要素の配置

GameMode

ゲームの中で共通するルール、もしくは場面(Level)に応じたルールを構成するための型です。
例えば、オフラインのアクションゲームであれば、キャラクター選択モード・サバイバルモード・トレーニングモードなどのルールを構成するイメージです。
オンラインゲームだと、プレイヤーのログイン処理やログアウト処理なども定義できます。
AGameModeBaseというC++のクラスがベースです。

GameState

GameModeに応じて、保管・追跡したいデータや状態を定義するための型です。
トレーニングモードで例えていうと、トレーニングにまつわる各種設定(ダミーの敵キャラの動きなど)を保存・追跡するイメージですね。
オンラインゲームの場合は、参加しているプレイヤーの一覧や、ステージの制限時間・残り時間などが管理できそうです。
AGameStateBaseというC++のクラスがベースです。

PlayerState

GameModeに応じて、プレイヤーごとに保管・追跡したいデータや状態を定義するための型です。
プレイヤーごとの攻撃力、HP、いわゆるバフ・デバフなどはここで保管するのがよさそうですね。
オンラインゲームの場合、他のプレイヤーのPlayerStateも参照できます。
APlayerStateというC++のクラスがベースです。

GameInstance

ゲームの起動中に、全体を通して保管・追跡したいデータや状態を定義するための型です。
メインの用途は、場面(Level)をまたいで保存したいデータを管理すること。
オンラインゲームの場合は、ネットワークが切断してオフラインになった際のエラーハンドリングにも利用されます。
UGameInstanceというC++のクラスがベースです。

Pawn

プレイヤーもしくはAIによって制御可能なキャラクターや敵、乗り物などを構成するための型です。
ゲームの画面上に映る、ほとんどの動く物体はここに属しています。
APawnというC++のクラスがベースです。

また、APawnの派生クラスとしてACharacterというクラスがあります。
3Dアニメーションに関する便利なコンポーネントが追加されているため、人型のキャラクターはこのACharacterクラスを利用することが多いですね。

Controller

Pawnの振る舞いを定義するための型です。
プレイヤーの操作とプレイヤーキャラクターの振る舞いを定義するAPlayerControllerクラス、AIによる振る舞いを定義するAAIControllerクラスがベースです。
ゲームのAIについて調べるとよく出現する「ビヘイビアツリー」と呼ばれる仕組みも、AIControllerを実装する上で登場しますね。

ちなみに、PlayerStateとは異なり、オンラインゲームの場合でも他のプレイヤーのPlayerControllerは参照できません。


ここまでで、Gameplay Frameworkの構成要素について見てきました。
その他にも、カメラ、UI/HUDなどの要素がGameplay Frameworkの中にありますが、今回はこの辺りにしておきます。

ゲームデザインにおける足場としての型

そもそもゲームは要素も多く複雑なものです。
ある程度の型がないと、選択肢が多すぎて迷う時間が長くなります。
実際、ゲームデザインやゲームプログラムの素人である私は、練習用ゲームをどのように設計したら良いか分からず、手探りでめちゃくちゃ時間をかけました。

そんな中で出会ったGameplay Frameworkという型は、複雑なゲームをデザインするための足場として、とても有用だと感じました。

ゲームデザインに限らないことですが、複雑で抽象的な物事を設計していく際には、自由度が高すぎて足場を見失い、思考が止まってしまうことがよくあります。
そんな時、うまく型を利用して推進力を上げられるよう、精進したいと思います。

おまけ : オンライン・マルチプレイヤーの場合

上に掲載した構成図はオフライン・シングルプレイヤーを想定していますが、オンライン・マルチプレイヤーの場合の構成図も作りました。
詳細は省略しますが、せっかくなので掲載します。

Gameplay Framework の構成要素の配置(オンライン・マルチプレイヤー)
Gameplay Framework の構成要素の配置(オンライン・マルチプレイヤー)

参考リンク