これは フェンリル デザインとテクノロジー Advent Calendar 2023 18日目の記事です。
こんにちは! GIMLE チームの太田です。
今回はアドベントカレンダーということで、数ヶ月前に趣味で始めたUnreal Engineについて書きます。
取り上げるのは「Gameplay Framework」です!
Unreal Engineには、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
- ネットワークの構築とマルチプレイヤー
- オンライン・マルチプレイヤーの詳細についてはこちらで