目次
はじめに
今回はインターフェースのメリットと使い方を解説します。
これを使いこなすことで、ブループリント同士の参照が疎になって実装がシンプルになるだけでなく、ゲームの負荷軽量化にもつながるので必ずマスターしておきましょう。
実装内容はUE5.0.3、TPサンプルで行っております。
解説
⓪インターフェースという機能の概要
インターフェースの最大のメリットは、”相手を知らずに処理を呼びだすことができる”ということです。
つまり、、キャストしなくてもいいということになります。
目的のブループリントの変数やイベントなどを呼び出す場合、Castという処理を行うのが基本的な考えですが、このCastという処理は参照を作るためゲームの負荷につながります。
そのためブループリントにCastが多用されているものはクソコードになりやすいです。
▼負荷を無視したクソコードの例
触れたものがAだったらBだったら、Cだったら、でイベントを呼びだす処理
なるべくキャストは使わない。(ここ重要)
でも、キャストしないと相手のイベント呼べないじゃん、、、
そんな時に使うのがブループリントインターフェースです。
また、インターフェースは着脱が容易なので、~Baseのように親に仮想関数を作って、子でオーバーライドする方法に比べて親が何であれ機能としてインターフェースを付与可能なので親に依存しない機能追加ができるのも魅力の一つです。
Q.じゃ、どんな時に使うといいの?
A.相手が不特定な時に共通したアクションを行いたいとき
例えば触る!という機能だけをインターフェースで作成しておき、触られたとき動作するブループリントにこのインターフェースを実装すると、プレイヤーはこのブループリントをキャストしなくても、このイベントを呼ぶことができます。
では、実装してみましょう。
①インターフェースを作成する
コンテンツ右クリックからブループリントインターフェースを選び、
名前をBPI_Actionとします。
これはプレイヤーから何らかのアクションを受け付けるかどうかのインターフェースです。
②インターフェースを編集する。
インターフェースを開くとこのような画面になります。
インターフェースはあくまで定義なので読み取り専用となっています。
右上の関数からそれぞれの機能を実装してみましょう。
触ったという機能のTouch
情報共有するためのGetInformationをそれぞれ定義しました。
③アクション対象のブループリントの作成
触られる対象を作りましょう。
ブループリントの作成からStaticMeshActorを親としたブループリント、BP_Door
StaticMeshComponentはCube、コリジョンはOverlapAll、VisibleをFalseにしておきます。
あとは好きにコンポーネントを追加してそれっぽくします。
Characterを親としたBP_NPCを作ります。
適当なキャラメッシュとアニメーションをセットしておきます。
レベルに配置しておきます。
④インターフェースの実装
それぞれ、ブループリントのクラス設定を押します。
インターフェースの実装からBPI_Actionを適応しておきます。
するとマイブループリントにインターフェースで用意した定義が出てきます。
Touchは右クリックからイベントを実装しましょう。
ここにTouchされたときの処理を書きます。
GetInformationには適当な文言を入れておきます。
⑤一番近いアクタの検索
BP_ThirdPersonCharacterを開いてFキーを押したら周囲のアクタを検索する仕組みを作ります。
このようなコリジョンになります。
一番近いアクタのみを呼び出したいので変数を作成してセットします。
DoesImplementInterfaceからTouchインターフェースが実装されているか判定します。
アクタの距離を検索して最短距離のアクタを検索します。
⑥インターフェース経由で呼び出してみよう
インターフェースを呼び出します。
実行してみましょう。
キャストを使用せずにイベントを実行することができました。
最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。