Unity ホラー風脱出ゲームの作り方6 3Dワールド空間にテキストオブジェクトを配置して異変発見を表示する | Unity入門の森 ゲームの作り方

Unity ホラー風脱出ゲームの作り方6 3Dワールド空間にテキストオブジェクトを配置して異変発見を表示する

Unity ホラー風3D脱出ゲームの作り方 ~8番ライクゲーを作りながらポストプロセスや音響表現をマスターしよう~

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

この記事は、Unity ホラー風脱出ゲームの作り方をわかりやすく解説していくシリーズの第6回です。

前回は、異変のアルゴリズムを実装し、実際に異変を発生させるところまで進めました。

前回の記事:

Unity ホラー風脱出ゲームの作り方5 8番出口ライクゲーを実現しよう!どんな異変も自由に作れる汎用システムを構築
この記事は、Unityを使った「8番出口」ライクなホラー風脱出ゲームの作り方講座の第5回です。前回は、エリアごとに音の響きを変えるリバーブを設定し、シーン全体の臨場感をアップさせました。その結果、“ホラーらしい雰囲気”が一気に引き立ちました...

今回は、プレイヤーが異変を見つけたかを判定する仕組みを導入し、進行度を可視化するカウンター機能を実装します。そして進行方向の前方に3Dオブジェクトで文字入りの「Exit」看板を設置し、前後の向きを直感的にわかりやすくします。

この回を通してUnityで3Dワールド空間に文字オブジェクトを配置し、表示内容を変更する方法をマスターしていきましょう。

異変あり・なしを判定、正解か判定システムを実装する

本家『8番出口』では、異変があれば引き返し、なければ直進する。その選択の正否が判定され、異変の有無と進行方向が合っていればカウンターが増えます。外すとまた最初に戻されてしまいます。

まずはこのルールに基づき、正解/不正解を判定するシステムを実装しましょう。

前回実装した public void roomEnd(int a) 関数の引数 int a を利用して正解/不正解を判定します。

前回、TriggerActionEndAEndB にそれぞれアタッチし、EndAに0EndBに1をInspector(インスペクター)から割り当てました。

この値をもとに、プレイヤーがどちら方向に進んだかを判定し、異変の有無に応じて「正解」または「不正解」を判断する仕組みを作ります。

スクリプトを作成する

まずは Project ウィンドウから、

script」フォルダ内にある前回作成した異変システムの基盤スクリプト 「EventManager」 を探し、

ダブルクリックで開きましょう。

ここに、今回の「正解/不正解判定」を行うための処理を追加していきます。

 

開けたら、下記のマーカー箇所を追加しましょう。

スクリプトの解説

マーカー部分について解説をします。

入口側の保持(前処理)
  • これは 入室時 に「どちら側から入ってきたか」を保持するための値です。

  • a == 0 ? 1 : 0 により、

    • startAから入ったら entrySide = 1(=“反対側はB”)

    • startBから入ったら entrySide = 0(=“反対側はA”)

      を記録します。

      “引き返したか/まっすぐ進んだか” を後で照合するための基準 になります。

正解・不正解の心臓部
  • a退室時 に踏んだ終点(EndA=0/EndB=1)の値。

  • a == entrySide で、入ってきた側に引き返したか を判定しています。

    • true(= 引き返した)なら Answer = 0

    • false(= まっすぐ進んだ)なら Answer = currentAnomalyIndex

ここで重要な前提:

currentAnomalyIndex == 0 が「異変なし」currentAnomalyIndex != 0 が「異変あり」 を表す設計になっています。

  • 引き返した場合a == entrySide)は Answer = 0(=“正解条件は異変なし”)。

    • 異変があるターンなら「引き返しが正解」→ currentAnomalyIndex は0以外なので 不一致、正解にはならない?…ではなく、次のケースで帳尻が合うようになっています。

  • まっすぐ進んだ場合a != entrySide)は Answer =currentAnomalyIndex

    • 異変なしターンなら currentAnomalyIndex == 0 → “前進が正解” として一致。

    • 異変ありターンなら currentAnomalyIndex != 0 → “前進は不正解” で不一致。

つまり最終行の

  • 異変なし なら「前進」で一致→正解

  • 異変あり なら「引き返し」で一致→正解

    …という 8番出口のルール を一行で満たす比較になっています。

また、正解時のみ SaveValue.usedMaps.Add(currentAnomalyIndex) が走り、

そのターンで使った異変IDを「使用済み」に登録します。

 

三項演算子の補足

書式:

条件 ? 真のときの値 : 偽のときの値

今回のコード :

は次と同じ意味です:

ゲームを再生して確かめる

書き終えたら CTRL+S でスクリプトを保存し、Unity に戻りましょう。

続けて CTRL+P で一度ゲームを再生します。

廊下を進み、選択に応じて 「正解(True)」/「不正解(False)」 のログが正しく出力されていれば完成です。

補足:Lightingの警告が出る場合

もしゲーム再生中に次のようなログが頻繁に表示される場合

これはライトの影(シャドウマップ)が多すぎるために出ている警告です。

次の手順で設定を変更しましょう。

Projectウィンドウから Prefab フォルダを開き、「Room_Start」プレハブをダブルクリックして開きます。

Hierarchy から Lights を探し、その中にある Light コンポーネント すべての Shadow TypeNo Shadowsにしておきましょう。今後の開発でも、影を生成させるライトは必要最低限にしましょう。

【ゲームの作り方講座プレゼント中!】

UnityのCanvas UIで3D空間に看板を作って進行方向をわかりやすくする

異変がなければ前へ進み、異変があれば引き返す。これが8番出口の基本ルールです。

しかし現状のままでは、部屋の中を見回しているうちに「どちらから来たのか」がわからなくなってしまうことがあります。

そこで、前方(=異変なし側)にExit看板を配置してあげることで、プレイヤーは進行方向を直感的に把握できるようになります。

この工夫により、探索中の混乱を防ぎ、よりスムーズにゲームを進行させることができます。

Canvas UIで3D空間内にExit看板を作成する

まずは、「Room_Start」プレハブに入りましょう。

まず、Hierarchyウィンドウで右クリック → UI > Image を選択します。

すると、自動的に CanvasImage オブジェクトが作成されます。

作成されたImageの名前を 「ExitA」 に変更しておきましょう。

次に、Hierarchyウィンドウから「Canvas」 を選択し、

Inspectorウィンドウで以下のように設定しましょう。

Rect Transformは通常では操作できないですが、CanvasのRender ModeをWorld Spaceにすると値を編集できるようになります。

World Spaceは、3D空間にUIを配置できるモードで、今回のように「Exit看板」を

シーン内に実際に立てたい場合に最適です。

Canvas UIのRender Mode 3種類とその特徴

モード名 概要 主な用途
Screen Space – Overlay 画面全体にUIを最前面で表示します。カメラの位置や角度に影響されません。 メニュー画面、HPバー、スコア表示など常に見えるUI向け。
Screen Space – Camera 特定のカメラを指定してUIを表示します。UIがカメラの遠近感の影響を受けます。 ミニマップや3D演出を含むHUD(例:照準マークやレーダー)などに最適。
World Space UIを3D空間内に実際のオブジェクトとして配置します。

看板・モニター・インゲームの立体UIなど、今回のような用途に最適。

補足説明(参考として)

「HUD」は “Head-Up Display” の略で、

プレイヤーが視点を動かさずに見る情報表示を指します。

たとえば:

  • 照準(クロスヘア)

  • 弾数や体力ゲージ

  • レーダー(敵位置の簡易マップ)

つまり「3Dの中にあるけど、プレイヤー視点のUI」

というのが Screen Space - Camera の特徴と合致します。

これで、ゲーム空間内に実際のオブジェクトとしてUIが表示されるようになります。

続いて、Hierarchyから「ExitA」を選択し、Inspectorの「RectTransform」を以下のように設定しましょう。

次に、ExitAを選択したまま、Inspector内の Image コンポーネント を確認しましょう。

Color項目をクリックして、Green(緑色) に設定します。

次に、Hierarchyから「ExitA」をクリックし、右クリックメニューから

UI > Text – TextMeshPro を選択します。

すると、「Text (TMP)」オブジェクトが ExitAの子オブジェクト として追加されます。

続いて、先ほど作成した Text (TMP) オブジェクトを選択し、

Inspector から以下のように設定しましょう。

Text(テキスト内容)

Font Size1

Alignment(整列):中央揃え

これで、看板の中央に「← Exit」というテキストが表示され、

プレイヤーにとって視覚的にわかりやすい目印になります。

次に、反対方向用のExit看板(ExitB) を作成します。

まず、Hierarchy で「ExitA」を選択し、

キーボードの Ctrl + Dを押して複製しましょう。

複製されたオブジェクトの名前を 「ExitB」 に変更します。

続いて、Hierarchy から先ほど複製した ExitB を選択し、

InspectorRectTransform を以下のように設定しましょう。

これで、「ExitA」、「ExitB」で部屋の両方に「Exit」看板が配置されました。

スクリプトでExit看板の表示を制御する

ここまでで、ExitAとExitBの看板を配置しました。

ここからは、これらの看板がプレイヤーの進行方向に応じて自動で切り替わるように制御していきます。

まず、Projectウィンドウから

scriptフォルダ内にある 「EventManager」スクリプト を探しましょう。

見つけたら、そのスクリプトをダブルクリックして開きます。

Visual Studio(または設定しているコードエディタ)が起動し、

コードの編集画面が表示されるはずです。

Exit看板をプレイヤーの進行方向に応じて切り替えるための制御を追加していきます。

以下のマーカー部分を「EventManager」に追加しましょう

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.shop/)で講座閲覧権を取得してね。

まとめと次回予告

今回は、プレイヤーの行動をもとに正解・不正解を判定し、

その結果に応じて「今何番出口」カウンターを制御
しました。

また、プレイヤーが方向感覚を見失わないように、

EXIT看板を設置して進行方向をわかりやすくする工夫も行いました。

ここまでで、ゲームとしての基本的なループ構造が完成し、

プレイ感もかなり本家『8番出口』に近づいてきたと思います。

 

次回は、これまでとは一味違う動的な異変を2種類ほど作成していきます。

見た目だけでなく、プレイヤーの行動に反応するタイプの異変を導入し、

さらに臨場感のある世界へ進化させましょう。

次回の記事↓

Unity 8番ライクのホラー風脱出ゲームの作り方7 動くお化けで動的なホラー演出を実装する
この記事は、Unity ホラー風脱出ゲームの作り方をわかりやすく解説していくシリーズの第7回です。前回はプレイヤーの行動をもとに正解・不正解を判定し、その結果に応じて「今何番出口」カウンターを制御しました。また、プレイヤーが方向感覚を見失わ...

Unity ホラー風3D脱出ゲームの作り方講座に戻る >>

【ゲームの作り方講座もプレゼント中!】

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

コメント

タイトルとURLをコピーしました