Labyrinthのつくりかた – マップ上のギミックを調べる

Labyrinth

はじめに

この記事は、そらまめゲームスが開発中の3D謎解きゲーム「Labyrinth(仮題)」の実装方法を解説したものです。

Labyrinth

Labyrinthではゲームのシステム部分のUE4プロジェクトを公開しております!
今回の事例も確認することができますので、興味がありましたらダウンロードしてみてください。

LabyrinthのUE4プロジェクト公開に関するお知らせ

あくまでLabyrinthでの実装事例を報告したもので、推奨される実装方法とは限りません。
実装を参考にされるのは自己責任でお願いいたしますm(_ _)m

忙しい方へ結論

以下のような挙動を実装します。

  • マップ上に赤・青・緑の扉があります。
  • 扉をタッチするとカメラがズームして扉を調べるモードになります。
  • ギミックを調べている最中は決められた範囲でカメラを動かすことができます。
  • ドアノブをタッチすると扉を開くアニメーションが再生されます。
  • 画面中央下の戻るアイコンをタッチすると元のカメラに戻ります。

このサンプルに含まれる事例

  • ステートを持つマップ上のアクターの実装例
  • アクターのインスタンスによってカットシーン(シーケンサー)を使いまわす

プロジェクト確認方法

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は探索型の謎解きゲームで、主人公はステージ内に存在する怪しい箇所を調べて、謎解きのヒントを入手したり、実際に謎を解いたりします。

これらのマップ上に配置された謎解き対象のアクターギミックと呼んでいます。

例えば公衆電話や自動販売機、教室の黒板や壁の落書きなどがあげられます。

ギミックはアイテムではないため拾うことはできません。マップ上でそのアクターに近づいて調べて、その場で謎を解いたりヒントを得たりします。

以下のような挙動の流れを想定します。

  1. ギミックに近づきタッチする
  2. カメラがギミックにズームする
  3. ギミックを調査する
    1. カメラを操作していろいろな角度から調べる
    2. 所持アイテムを使って謎を解く
    3. ギミックを操作して謎を解く
    4. カットシーン(シーケンサー)を再生する
  4. カメラをズームアウトしてプレイヤーのカメラに戻す
    もしくはギミックの謎解きによってストーリーが進行する
  5. 通常状態に戻る
    もしくはステージクリア

ギミックをタッチする

BP_PlayerControllerのタッチ判定処理

BP_PlayerControllerにて、タッチイベントによって呼び出されるカスタムイベントとして実装しました。

画面をタッチした位置からレイを飛ばして、ぶつかったアクターがギミッククラスかどうかキャストを使って判定します。

ギミッククラスであれば、ギミックを管理するBP_AnalyzeGimmickComponentに対して、調査開始のイベントを呼び出します。

カメラをズームイン

BP_AnalyzeGimmickComponentのズームイン処理

ギミックをタッチすると、カメラがギミックにズームして謎解きを開始します。

ズームイン / ズームアウトの処理はBP_AnalyzeGimmickComponentが行います。このブループリントはBP_PlayerCharacterのアクターコンポーネントです。

ギミックを調査する

カメラのズームが完了したらギミックの調査を開始します。

このシーンでは以下の要素によって謎を解いていきます。

  1. カメラを操作していろいろな角度から調べる
  2. 所持アイテムを使って謎を解く
  3. ギミックを操作して謎を解く
  4. カットシーン(シーケンサー)を再生する

処理はギミック本体のブループリントが担います。

ギミックの実装

本題であるギミック本体の実装は別記事に移しました(記事が長くなってしまったので…)

Labyrinth – ギミックの実装

2020年5月7日

ギミックのカットシーン

ギミックを調べている際に再生するカットシーンの実装も別記事に移しました。

Labyrinth – ギミックのカットシーン

2020年5月7日

カメラをズームアウト

BP_AnalyzeGimmickComponentのズームアウト処理

ギミックの調査を終了すると、カメラをズームアウトしてプレイヤーカメラに戻します。

この処理もBP_AnalyzeGimmickComponentが行っています。

ギミック一覧(メンバーのみ閲覧可能)

Labyrinth – ギミック一覧

2020年5月7日

配布UE4プロジェクト

以下のリンク先からUE4プロジェクトを取得すると、今回の実装をすべて確認することができます!自己責任でお好きにご利用くださいませ!

LabyrinthのUE4プロジェクト公開に関するお知らせ