ThirdPersonStoryAdventureTemplateの使い方
はじめに
世の中にはアクション、RPG,シミュレーション、パズルなどなど様々なジャンルのゲームがありますが、アドベンチャーゲームは自分で作った世界を表現するストーリーテリングにはピッタリのゲームジャンルです。
しかもアクションゲームほどシビアな処理を書く必要がなく、比較的アセットの導入もしやすいため、ゲーム制作初心者が作る最初の一作目として個人的にはとてもお勧めです。
…とはいえ、とはいえですよ。
比較的難易度低めのアドベンチャーゲームといえども、キャラクター移動、インタラクション、アイテムシステム、会話、カットシーン、レベル遷移、セーブロードなど、ぱっと思い浮かぶだけでかなりの実装が必要そうです。
これ全部一人で実装しようとすると、それはもうかなりの労力が必要なわけでして、生半可な覚悟では心がポッキリ折れちゃうの間違いなしです。
そこで、今回お勧めするThirdPersonStoryAdventureTemplateです。
このアセットには、嬉しいことに上記実装が全て含まれています。
あとは自分で作った、もしくはアセットストアで買ってきたキャラクターや背景を当て込んで、NPCやアイテムを配置して謎解き・会話シーンを作り、カットシーンでストーリー進行を盛り上げていけば、ゲームとして成立しちゃうという寸法です。
しかも、このアセットはマーケットプレイスで2021年6月の無料コンテンツに選ばれているので買い逃していなければ、無料で始めることができます。
もう後は作るしかないでしょ!
ってとこなんですが・・・。
ドキュメントは英語で、現状ちょっと取っつきが悪い部分があるのは否めません。
そこで、本記事では公式のTPSAT_Documentaion.pdfを日本語化し、多少かみ砕いて説明を加えたものをお届けしてみようかと思います。
本家pdfを呼んでいる方にとっては被っているものとなりますのでご了承ください。
記事公開の許可をくれたDennis Paulyさん、ありがとうございました!
※使用しているバージョンはUE4 26.2、アセットは2021/06/19時点で公開されている最新版となります。
※ThirdPersonStoryAdventureTemplateと表記すると長いので、本記事中ではTPSATと略します
ThirdPersonStoryAdventureTemplateについて
このテンプレートで出来ること
このテンプレートはプレイヤーキャラクターが画面中央に表示された状態でゲームが進行する、いわゆるサードパーソンビュータイプのゲームを作るためのものです。
マップ上に配置された家具、道具、アイテムなどのオブジェクトを調べたり、取得したり、使ったり、またNPCと対話を行ったりするシステムが実装されています。(これを総じてインタラクトと呼びます)
公式のドキュメントには「Life is Strage」や「The Walking Dead」などからインスピレーションを受けたと書いてありますね。
このテンプレートはどのような人向けか?
プログラムの専門的知識はないけど自分のアイディアをゲームにしてみたいプランナー、デザイナーの方々にはピッタリのアセットです。もちろん、プログラマさんでも開発時間を短縮させるためには非常に有益かと思います。
テンプレートで実装されている機能
このテンプレートでは以下のような機能が実装されています。
- サードパーソンゲーム用の機能が実装されたPlayerController、Pawn、AnimationBlueprint
これらはUnrealEngineでゲームを動かすために必要となる基本クラスで、TPSATではさらにサードパーソンゲーム向けの機能をセットアップした状態で提供されています。
それぞれのクラスの役割は、プレイヤーの操作を受け取るPlayerController、ゲーム内でキャラクターとして配置されるPawn、PawnをアニメーションさせるためのAnimationBlueprintとなっています。 - シーケンサーによるシネマティック演出を使ったインタラクション
UnrealEngineには操作入力を中断し用意しておいたカメラワークやキャラクターのアニメーションを再生し映画のカットシーンのような演出を行うシーケンサーという機能がありますが、TPSATにはゲーム中でNPCやアイテムにインタラクトしたときに、シーケンサーを実行する機能が実装されています。
これにより、いわゆるイベントシーンを実現することが可能です。 - 3Dスぺース上に表示されるインタラクションウィジット
TPSATではプレイヤーがレベル上に配置されているアクセス可能なオブジェクトやNPCに近づくと、どういったインタラクトを行うか選択させるUIを3D空間上に表示します。
UIは作るの結構面倒なので、これのおかげでサクッと実装が済んでかなり助かります。 - ジャーナルやアイテムの収集・表示システム
TPSATにはアイテムやジャーナルに関するシステム全般が実装されています。
そのためゲーム制作者はアイテムやジャーナルに関する情報や動作を設定し、それをレベル上に配置するだけで、プレイヤーはそれらを集め、説明を表示し、使うことが出来るようになります。UIもセットとなっているので非常に便利です。 - マウス・キーボードとゲームパッドのサポートと自動切換えシステム
マウス・キーボードとゲームパッド両対応の実装は非常に大変なのですが、TPSATには標準でこの機能が組み込まれています。
入力デバイスに応じてメニューの操作表示も切り替えてくれます。 - メインメニュー、インゲームメニューとグラフィック・オーディオ・ゲームオプション設定
ここでいうメインメニューはタイトル画面に相当するもので、そこからグラフィックやオーディオなどの各種オプション設定メニューへ移行することも可能です。インゲームメニューは、ゲームプレイ中に呼び出すメニューで、アイテムやジャーナルに関するUI表示、ゲームセーブ呼び出し、ゲーム終了といった利用できます。 - セーブロードサポート
TPSATは3つのセーブゲームスロットを持っており、それぞれにゲームの進行状態をセーブすることが出来ます。TPSATのルールに従ってアイテムやジャーナルを作成、配置すれば、セーブゲームで自動的にそれらの状態を保存してくれます。
もちろん独自に進行状態を管理するデータを作ってセーブ、ロードに対応させることも可能です。 - レベル遷移・レベルストリーミング機能
レベル遷移というのは、いわゆるマップチェンジのことです。
タイトル画面からゲームマップへのチェンジ、ゲームプレイ中でのマップ切り替え(出入り口から次のフィールドへ移動など)をサポートしています。
ちょっと高度な使い方ですがマップが非常に大きい場合は小分けにしてゲームを止めることなく必要な領域だけマップを読み込むレベルストリーミング機能を使うこともできます。 - 多言語サポート
オプション画面で言語切り替えを行うことにより、ゲーム内で使われる言語を切り替える機能をサポートしています。切り替えるシステムは存在しますが、各言語ごとのデータはもちろんゲームの作り手が用意する必要があります。 - サーフェースタイプによる足音の切り替え
キャラクターが歩くときに鳴る足音を、地面の種類(サーフェースタイプ)に応じて切り替えるシステムが用意されています。土、コンクリート、木などを地面に適切に設定してあげれば自動的に足音が切り替わり、ゲームの臨場感をアップさせることが出来ます。
インタラクティブアクター(プレイヤーがアクセスできる配置物・人)
TPSATにはプレイヤーがアクセスできる配置物として様々なタイプのアクターが用意されています。これらをインタラクティブアクターと呼びます。
プレイヤーがインタラクティブアクターに近づくと、その名前と、どういったインタラクトを行うことが出来るか(一例をあげると、調べる、取る、話す、動かすなど)を表すインタラクションアイコンを表示します。
インタラクトにはそれぞれメッセージ、セリフ、ボイス、効果音を割り当てておくことができ、プレイヤーが該当インタラクトを実行したときに、それらを再生させることが出来ます。
他にも、インタラクションアクターには以下のような機能があります。
- アクターへのフォーカス
アクセス時にカメラの視点をアクターへ向ける。 - 調べる(2D)
ゲーム中、プレイヤーがアクターを調べた時に、アクターに関する情報を2Dウィジェットで画像として表示させることができます。画像はいくつか用意しておくことによって、ユーザーの操作でページ送りするような操作も可能です。 - 調べる(3D)
ゲーム中、プレイヤーがアクターを調べた時に、対象アクターをプレイヤーカメラ中心にもってきてユーザー操作で回転して調べさせることができます。 - 収集
アクターをアイテムとして収集することができます。収集時に既定のアニメーションシーケンスを再生させることが可能で、上記の「調べる」操作を行った後にさらに決定ボタンを押した時に収集させる、といった設定も可能です。 - ジャーナルへの追加
対象のアクターを調べたときにジャーナルに情報を追加することが出来ます。 - シーケンスのループ
それぞれのアニメーションシーケンスを設定しておくことによりインタラクト実行時に、最初にイントロシーケンス再生、インタラクト中ループシーケンス再生、インタラクト終了時にエンドシーケンス再生、その後、ゲームプレイに戻る、といった遷移をさせることができます。 - NPCとの会話プレイヤーによるセリフの選択により分岐するNPC会話シーンを作ることが出来ます。
構成とセットアップ
最初に知っておくべきこと
TPSATは簡単で使いやすいように設計されていますが、メインとなるコンポーネントはどのような構成でどんな種類があるかの知っておく必要があります。
Blueprints->Coreフォルダの中にはTPSATのコアとなるブループリントがあるので、一つずつ見ていきましょう。
ゲームインスタンス
TPSATではゲームインスタンスとしてBP_StoryAdv_GameInstanceを使用します。
ゲームインスタンスで設定された値はレベル遷移しても保持されるので、ユーザー設定やレベルストリーミングの制御、セーブ・ロードの実装に使われています。
他のアクターからも必要に応じてそれらの機能にアクセスすることも可能です。
ゲームコントローラー
TPSATではゲームコントローラーとしてBP_StoryAdv_GameControllerというアクターを使用します。このクラスにはTPSATでインタラクションを実現するシステムが実装されており、ゲーム内のメニュー、プレイヤーデータのバックアップ、デバイスからの入力など様々な処理を行う最も重要なアクターの一つです。
メインメニューのレベルでない限り、パーシスタントレベルには常にこのインスタンスが存在する必要がありますが、通常このアクターはゲームモードにより自動生成されるため手動でレベルに配置する必要はありません。
ゲームモード
ゲームモードはゲームのルールや仕組みを管理するために使われるクラスで、使用するポーンやコントローラーなどのクラス制御も行っています。
TPSATでは、このゲームモードにBP_StoryAdv_GameModeを使用しておりゲーム設定の制御や入力デバイスの変更を行う関数を呼び出しています。
また、TPSATはゲームのメインメニュー用に別のゲームモードを使っていますが、これも基本的にはBP_StoryAdv_GameModeを派生させたものです。
メインメニューのゲームモードではゲームキャラクターではなく、メニュー用に用意された専用のポーンを生成します。
メニューポーン
メニューポーンはメインメニューのレベルでのみ使用されます。
メニューを動作させるために、プレイヤーの入力を受け取ってそれをメインメニューのウィジェットに転送します。
インターフェース
TPSATでは、クラス間で多くのやりとりが行われています。
BP_InteractionInterfaceは、インタラクティブなアクターから情報を取得したり、実際のインタラクションに使用されます。
BP_WidgetInterfaceは、インタラクティブなアクターから情報を取得したり、インタラクションを実行する際に使用します。
インターフェイスに慣れていない方は、TPSATの仕組みを深く理解する前に、まずUE4のインターフェイスがどのように機能するかを確認してください。
関数ライブラリ
関数ライブラリBP_StoryAdv_FunctionLibraryにはTPSAT内の様々なアクターで使われるヘルパー関数が多数用意されています。特にTPSATで管理している特定のアクタを取得するためによく使われ、またウィジェットの可視性をトグルするのにも使用されます。
今後のアップデートでの競合を防ぐためにも、ゲーム制作者はこのライブラリに直接関数などは追加せず、必要に応じて個別のライブラリを作成することが推奨されています。
新しいゲームの開始
新規ゲーム開始時にロードされるデフォルトマップは、BP_StoryAdv_GameInstance内の「NewGameLevel」という変数の値を変更することで設定します。この変数はカテゴリに入っていないので、ブループリントを開くとすぐに見つけることができます。 最初にゲームレベルデータテーブル(DataTables->GameSettings->GameLevels_DataTable)に使用するゲームレベルを追加し必要な情報をすべて埋めてください。これに関する詳細は、「レベルの移行とストリーミング」でさらに詳しく説明します。
プレイヤーキャラクタ
TPSATのプレイヤーキャラクターには、一般的なカメラ設定の他に、カメラの焦点深度の調整、プレイヤーの動き、頭の回転、IKチェーンを使ってアイテムを拾う際の手の目標位置設定などの機能が含まれています。
これらは、TPSAT標準のサードパーソンビューのアドベンチャーゲームに合わせて設定されていますが、もちろん、自分のゲームデザインに合わせて変更することも可能です。
自分のキャラクターをどうやって登場させるか?
TPSATではUE4標準のマネキンがプレイヤーとして使われていますが、当然これを差し替えることができます。
TPSATで提供された機能を維持したままプレイヤーキャラクターを変更するためには、BP_StoryAdv_Characterを派生させた新しいクラスを作成するか、用意したキャラクタクラスの基底をBP_StoryAdv_Characterに変更することが推奨されています。
これらの方法を、将来的にTPSATがバージョンアップしても大きな変更をせずに対応させることが可能です。
さらに上記対応を行った上で、新しいキャラクターメッシュのアニメーションブループリントを設定する必要があります。
TPSATではアニメーションブループリントとしてAnimBP_StoryAdv_Characterが使われているのでスケルトンが同じであれば、これをリターゲットするだけで問題ありません。スケルトンが異なる場合はリターゲット自体は可能ですが、そのうえで元のアニメーションを削除して独自のものに置き換える必要があります。
AnimBP_StoryAdv_Characterではあまり多くのことが行われていないので、自分のアニメーションブループリントに反映させるのは非常に簡単です。
インタラクションシステム
TPSATのインタラクションシステムは、4-アクション-システムがベースになっています。
4-アクション-システムというのは、1つの対象に対して最大4つのインタラクションが可能で、上ボタン、左ボタン、右ボタン、下ボタンと4つのインタラクションを割り振ることが出来る仕組みです。
TPSATはゲームパッドでのプレイを想定しているため、これらのボタンはゲームパッド右側のフェイスボタンに対応しています(A、B、X、Y)。
ボタンごとに異なるメッセージを対象のアイテム・オブジェクト・NPCに送信し、その対象はそれに個別に反応することができます。
インタラクティブオブジェクトとアイテムデータ
インタラクティブなオブジェクト
インタラクトできるオブジェクトはスタティックメッシュを使用しているか、スケルトンメッシュを使用しているかによって、BP_Base_InteractiveObjectまたはBP_Base_InteractiveCharacterのいずれかの継承クラスとなります。
これらのアクターはインタラクション機能を制御し、設定したデータテーブルからデータを読み取り、UIウィジェットの表示/非表示を実行します。
インタラクションシステムはメッシュコンポーネントのオブジェクトタイプ (Collision Presets内のObjectType)がInteractiveに設定されているものを検知します。
プレイヤーが、これらのアクター(やその子アクター)に近づくとアクターに設定されたインタラクトに関するデータが読み取られ、それに従ってUIウィジェットが表示されます。
インタラクトが開始されると、対象のアクターのインターフェースにメッセージが送られ対応するインタラクションイベントが実行されます。
TPSATで用意されているインタラクティブアクター
TPSATには独自のインタラクティブアクターを作成するために利用できる親クラスがいくつかあり、Blueprints->Core->BaseActorsの中にまとまっています。
これらのアクターは、すべてデータテーブルからデータを取得して動作するので、適切なデータテーブルに行を用意するだけで、ゲームの世界に新たなアイテムを設定することができます。それらのクラスを以下に一つずつ紹介していきます。
BP_Base_InteractiveObject
このクラスはスタティックメッシュを使ったインタラクティブなオブジェクトすべての基底となっているクラスです。これを継承させると基本的なインタラクティブ機能を持った独自のスタティックメッシュアクターを作ることが出来ます。
BP_Base_InteractiveCharacter
BP_Base_InteractiveObjectのスケルタルメッシュバージョンです。
これを継承させると基本的なインタラクティブ機能を持った独自のスケルタルメッシュアクターを作ることが出来ます。
BP_Base_SimpleInspection
プレイヤーがアクセスするとカメラが、このオブジェクトを向き、必要に応じて設定されたダイアログを表示させることが出来ます。
BP_Base_InspectionCloseUp_2D
このクラスをインタラクトすると、あらかじめ定義されたフルスクリーンのユーザーインターフェース・ウィジェットが表示されます。
このウィジェットは複数のページを持つことが可能で、プレイヤーの操作でそれをページ送りさせることが出来ます。
BP_Base_InspectionCloseUp_3D
このアクターをインタラクトすると、オブジェクトがプレイヤーのカメラの近くに移動し、ユーザー操作によりメッシュを3D空間で回転させることができます。アイテムは元に戻したり、拾ってインベントリに入れたりすることができます。インタラクションの際には、あらかじめ定義されたダイアログを表示することもできます。
BP_Base_LoopingSequence
このクラスでは、3つのレベルシーケンスを設定することができます。1つはイントロ、1つはループ、1つはエンディングのシーケンスです。
インタラクション開始時にイントロのシーケンスが再生され、それが終わると、ループアニメーションの再生がシームレスに再生、プレイヤーは入力によってそれを終了することができ、エンディング・シーケンスが再生されます。
それが終わるとゲームプレイが再開されます。
シーケンスが再生されている間に、音楽トラックやプレイヤーのダイアログを流すこともできます。
雰囲気の演出を行うために様々な使い方ができる機能で、例えば、BGM付きの休憩スポットとして、プレイヤーやキャラクターに考える時間を与えることができます。
BP_Base_SimpleCollectable
このクラスは、プレイヤーがインタラクトするとアイテムとしてインベントリに追加されるクラスです。
アイテム追加時に、いろいろな動作を行わせることが出来ます。
あらかじめ定義されたレベルシーケンスを再生してアイテムを拾うこともできますし 、IK ボーン調整を使用して単純なテイクアニメーションを再生し、ワールドスペースでキャラクタの手をアイテムに近づけることもできます。
また、プレイヤーがアイテムを持っている間、アイテムはインベントリにのみ表示されるようにしたり、あらかじめ定義されたアイコンを画面に表示させることもできます(キーアイテムを拾ってすぐに使う必要がある場合などに便利です)。
その他のフォルダにあるクラスについて
その他のクラスは特定のケースで使用されます。対話用NPC、レベル移行用アクター、使用アクションについては、それぞれのトピックで言及します。
テーブルに格納されているデータ
ゲームのアイテム情報を整理するため、TPSATではすべてのアイテム情報はデータテーブルに保存されています。 ゲームワールドに配置したインタラクティブアクターには、テーブルと行名を指定する部分があり、これによりそのアイテムのオブジェクト名、インタラクションラベル、ダイアログデータ、その他プロパティが決定されます。
こういった設計は、ゲーム制作者がゲーム内に登場するすべてのアイテムを包括的に把握し、ゲームが破綻しないよう管理するために非常に有用な仕組みです。
アイテムの使用
アイテムはインベントリを開いて使用することができます。
アイテムを使用するには、そのアイテムのInventoryDataの項目に使用アクションを割り当てる必要があります。
使用アクションはBP_Base_UseActionを派生させたブループリントクラスである必要があり、アイテム使用時にオブジェクトが生成されイベントが実行されます。アクション終了時には自分自身を破棄する必要があります。
アイテム使用アクションを自作する場合、アイテム使用時には関数 "RunScript"が実行されるので、これをオーバーライドし、親クラス呼び出しを行ってください。
その後ろに必要な機能を記述し、処理が完了したら自身のアクタを削除するようにノードを記述してください。
なお、アイテムの「Discard when used」フラグが有効になっている場合は、使用時にインベントリからアイテムが自動的に削除されます。
会話
プレイヤー単体のセリフ
オブジェクトを調べた時などに再生されるプレイヤー単体のセリフもデータテーブルに用意します。
デフォルトでは「DataTables->Dialogues->ObjectDescriptions」に記述されています。
このテーブルには、各項目ごとに、再生するセリフの音声データや表示する字幕などの情報が並んでいます。データは配列要素として提供されているので、複数行のテキストを再生することも可能です。
TPSATのサンプルでは、最初の部屋(ShowRoom)に配置してあるアイテムは「DataTables->ItemData->ShowroomItems」に記述されている設定で動作するようになっていますが、この中で各アイテムをプレイヤーが調べた時に「DataTables->Dialogues->ObjectDescriptions」の記述に従ってセリフ表示・音声再生を行うよう設定されています。
字幕の表示
TPSATの字幕は、エンジンに標準で用意されている字幕システムに基づくものではありません。
TPSATで用意されているウィジェットを使い、プレイヤーのセリフ」で説明したデータテーブル(ObjectDescriptions)に記述されたテキストを表示しています。
字幕の1行あたりの表示時間は文字数に依存するため、短い文章は長い文章よりも早く自動的にフェードアウトします。 視覚的な実装は、WBP_Subtitlesで変更できます。
NPCとの会話
会話するNPCを作るためにはBP_Base_DialogueNPCを派生させたクラスを作成し、そこに必要な設定を行っていきます。会話に関する設定はConversation Setupという項目にまとめられています。
プレイヤーとNPCとの会話には、2つのデータテーブルが必要です。
1つのデータテーブルには、プレイヤーのセリフ設定がすべて入っており、もう1つのテーブルにはNPCのセリフ設定がすべて入っています。 TPSATのサンプルではTPSAT->DataTables->Dialogues->ExampleConversation内のExampleConversation_PlayerとExampleConversation_NPCがそれに該当します。
NPC用のデータテーブルにはセリフごとに再生するレベルシーケンス、表示する字幕テキスト、字幕テキスト表示時間、次に表示するセリフのデータテーブルと行の指定が存在します。
一方、プレイヤー用のデータテーブルにも再生するレベルシーケンスの指定はありますがこちらはループ再生用となっています。これは、プレイヤー側のセリフはユーザーが選択できるようになっているためです。
プレイヤー用のセリフは、選択肢ごとに複数記述できるようになっており、次に表示するNPCのセリフも分けて設定できるので会話の分岐が可能となっています。
プレイヤーの選択結果の反映
NPCとの会話においてプレイヤーの選択によって何らかの処理を行いたい場合は、BP_Base_ConsequenceScriptを派生させた新しいクラスを作成し、その新しいクラスの中にある「Run Script」という関数をオーバーライドします。
この関数に、ドアをロックする、別の会話を可能にするなど、行いたい処理を記述していきます。関数が呼び出された後はこのアクタは必要ありませんので、関数の最後に自分自身のアクタを破棄することを忘れないでください。
プレイヤーの選択結果に上記クラスの処理を追加するには、プレイヤーの会話用データテーブルで選択肢を記述するOptionsという項目の中のConsequence Scriptに作成したクラスを設定します。
会話の例とBP_ExampleConsequenceScriptを参考にしてみてください。
レベル移行とストリーミング
レベル移行時にゲームの状態を維持させることについては、あまり気にする必要はありません。 BP_StoryAdv_GameInstanceへの参照を取得し"Level Transition"という関数を呼び出してパラメータに移動したいレベルを指定します。
この時注意しなくてはならないのは、レベル指定はアセットのレベル名を直接指定するのではなく、後述するレベル移行用のデータテーブルに必要なレベル情報を登録しておき、その行名を指定する必要があるということです。
また、パーシスタントレベルの移動ではなく、プレイ中にサブレベルをストリーミングイン、アウトしたい場合は、BP_StoryAdv_GameInstanceの"Stream in and Out"という関数を使用します。
さらにレベル移行をさらに簡単にするために、BP_LevelTransitionActorというマスターアクターが用意されています。
このアクターにレベルやサブレベルの名前を指定しておけば、インタラクトする際に定義されたレベルを自動的にロードしてくれます。また例えば、ドアから出るなど、事前に再生されるべきシーケンスを指定することもできます。
ゲームで使うレベルはすべてDataTables->GameSettingsの中にあるGameLevels_DataTableというデータテーブルに登録しておく必要があります。
ここには各行ごとに、レベル説明、メインレベル名、サブレベル名配列、レベル移行時に表示するサブレベルのリスト、チャプタータイトル(セーブゲームスロットの表示に利用される)が設定されており、"Level Transition"でレベル移行を行うときには、このデータテーブルと行を指定することになります。
なお、レベル説明については開発時の参考用にのみ利用され実際のゲームで使われることはありません。
多言語対応
TPSATはローカリゼーションに対応しています。
ほとんどのユーザーインターフェースのテキストは文字列テーブルに集められており、異なる言語用のデータセットを簡単に作成することができます。
メニューで言語を切り替えると、これらのユーザーインターフェイスの文字列に使われるデータセットも自動的に切り替わります。
UIのカスタマイズ
Blueprints->Core->Settingsフォルダ内には、TPSATの設定を変更できる構造体やテーブルが入っています。この中のBP_UserInterfaceButtons_Gamepad、BP_UserInterfaceButton_MouseKeyboardにはTPSATのUIで表示されるゲームパッドやマウス&キーボードのボタン画像が定義されており、ここを変更することにより任意のものに差し替えることが出来ます。
UI表示を行っている全アセットは、これらの構造体の値やデータテーブルで設定された値を読み込んで使うので、表示をカスタマイズしたいときに各ウィジェットごとに画像、フォント、色を手動で置き換える必要がないようになってます。
ただし、いくつかの設定のカスタマイズでは、そのような作業が必要になることもありますのでご注意ください。
便利な機能
TPSATには便利な関数がいくつか実装されています。
以下は、自分でゲームを作る際に役に立つ関数でしょう。
DisplayMessage
GetGameControllerで、BP_StoryAdv_GameControllerの参照を取得し、DisplayMessage関数を呼び出せば、任意の文字列を画面上にフェードイン、フェードアウト付きで表示させることができます。
関数ライブラリに用意されている機能(すべてのアクターから呼び出し可能)
HideActiveWidgets,ShowActiveWidgets
シーケンス再生中などに、一時的にウィジェットの非表示/表示を切り替えるにはHideActiveWidgets,ShowActiveWidgetsを使用します。
IsItemInInventory?
この関数は、その名の通り特定のアイテムがプレイヤーのインベントリにあるかどうかを返します。
GetStoryAdvGameMode,GetStoryAdvGameInstance,GetGameController
これらの関数は、TPSATのゲームモード、ゲームインスタンス、ゲームコントローラーへの参照を取得できます。
そこから関数を呼び出したり、情報を取得したりするのに役立ちます。
変更履歴・アップデートに関するヘルプ
TPSATにバージョンアップが入った場合に既存プロジェクトにそれらを適用するには、まず最初に最新版のテンプレートを使って新しいプロジェクトを作成し、その中でバージョンアップが入ったTPSATのファイルを個別に既存のプロジェクトに移行することをお勧めします。
移行する際には、移行先のプロジェクトを閉じておいてください。
あるファイルを移行する際、エンジンは他のファイルも移行しようとします。混乱を防ぐために、移行したいファイルには「置き換え」を、それ以外のファイルには「すべてなし」を押してください。
バージョンアップによりTPSATのどのファイルに変更が入ったかのチェンジログはディスコードで調べることができます。(https://discord.gg/ekhzfCW)
最後に
さて、以上でドキュメントに書かれていることは大体網羅した感じではあります。
が...自分で記事書いておいてこんなこと言うのはなんですが、これだけだと絶対資料足りないと思います(笑)
より具体的に、どういうケースではどのクラスをどのように派生させてセットアップすればいいか突っ込んだ解説がないと、さくっと作るのは難しそうです。
Twitterで反響あればもっと使い込んでその辺の解説を行う追加記事を出したいなと思っております。
それでは、また次回の記事で!