はじめに
Labyrinthではゲームのシステム部分のUE4プロジェクトを公開しております!
今回の事例も確認することができますので、興味がありましたらダウンロードしてみてください。
忙しい方へ結論
以下のような挙動を実装します。
- マップ上に赤・青・緑の扉があります。
- 扉をタッチするとカメラがズームして扉を調べるモードになります。
- ギミックを調べている最中は決められた範囲でカメラを動かすことができます。
- ドアノブをタッチすると扉を開くアニメーションが再生されます。
- 画面中央下の戻るアイコンをタッチすると元のカメラに戻ります。
このサンプルに含まれる事例
- ステートを持つマップ上のアクターの実装例
- アクターのインスタンスによってカットシーン(シーケンサー)を使いまわす
プロジェクト確認方法
テストマップの場所
LabyrinthCoreTest > GimmickTest > GimmickTest
操作方法
- 通常時
左クリック ・・・ 対象を調べる(地面をクリックした場合はその地点へ移動)
左クリックしたまま動かす ・・・ カメラ操作 - ギミック調査時
左クリック ・・・ 対象を調べる
左クリックと右クリックしたまま動かす ・・・ カメラ操作
関連するブループリント
- LabyrinthCoreTest > GimmickTest > BP_GimmickTest_Door
今回使用する扉ギミックのクラスブループリントです。 - LabyrinthCore > Blueprints> BP_Gimmick
ギミックの親クラスブループリントです。 - LabyrinthCoreTest > GimmickTest > GimmickTest_Cutscene
カットシーンを管理するレベルブループリントです。 - LabyrinthCoreTest > GimmickTest > BPIF_GimmickTest_Door
扉ギミックからカットシーンレベルに指示を伝えるためのインターフェースです。
GimmickTest_Cutsceneが実装します。
要件定義
Labyrinthは探索型の謎解きゲームで、主人公はステージ内に存在する怪しい箇所を調べて、謎解きのヒントを入手したり、実際に謎を解いたりします。
これらのマップ上に配置された謎解き対象のアクターをギミックと呼んでいます。
例えば公衆電話や自動販売機、教室の黒板や壁の落書きなどがあげられます。
ギミックはアイテムではないため拾うことはできません。マップ上でそのアクターに近づいて調べて、その場で謎を解いたりヒントを得たりします。
以下のような挙動の流れを想定します。
- ギミックに近づきタッチする
- カメラがギミックにズームする
- ギミックを調査する
- カメラを操作していろいろな角度から調べる
- 所持アイテムを使って謎を解く
- ギミックを操作して謎を解く
- カットシーン(シーケンサー)を再生する
- カメラをズームアウトしてプレイヤーのカメラに戻す
もしくはギミックの謎解きによってストーリーが進行する - 通常状態に戻る
もしくはステージクリア
ギミックをタッチする
BP_PlayerControllerにて、タッチイベントによって呼び出されるカスタムイベントとして実装しました。
画面をタッチした位置からレイを飛ばして、ぶつかったアクターがギミッククラスかどうかキャストを使って判定します。
ギミッククラスであれば、ギミックを管理するBP_AnalyzeGimmickComponentに対して、調査開始のイベントを呼び出します。
カメラをズームイン
ギミックをタッチすると、カメラがギミックにズームして謎解きを開始します。
ズームイン / ズームアウトの処理はBP_AnalyzeGimmickComponentが行います。このブループリントはBP_PlayerCharacterのアクターコンポーネントです。
ギミックを調査する
カメラのズームが完了したらギミックの調査を開始します。
このシーンでは以下の要素によって謎を解いていきます。
- カメラを操作していろいろな角度から調べる
- 所持アイテムを使って謎を解く
- ギミックを操作して謎を解く
- カットシーン(シーケンサー)を再生する
処理はギミック本体のブループリントが担います。
ギミックの実装
本題であるギミック本体の実装は別記事に移しました(記事が長くなってしまったので…)
ギミックのカットシーン
ギミックを調べている際に再生するカットシーンの実装も別記事に移しました。
カメラをズームアウト
ギミックの調査を終了すると、カメラをズームアウトしてプレイヤーカメラに戻します。
この処理もBP_AnalyzeGimmickComponentが行っています。
最近のコメント