Unity 8番ライクのホラー風脱出ゲームの作り方7 動くお化けで動的なホラー演出を実装する | Unity入門の森 ゲームの作り方

Unity 8番ライクのホラー風脱出ゲームの作り方7 動くお化けで動的なホラー演出を実装する

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

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

【永久会員チケット】

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

全講座を見放題で学ぶ

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

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

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

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

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

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

前回の記事:

Unity ホラー風脱出ゲームの作り方6 3Dワールド空間にテキストオブジェクトを配置して異変発見を表示する
この記事は、Unity ホラー風脱出ゲームの作り方をわかりやすく解説していくシリーズの第6回です。前回は、異変のアルゴリズムを実装し、実際に異変を発生させるところまで進めました。前回の記事:今回は、プレイヤーが異変を見つけたかを判定する仕組...

前回までに扱ってきた異変は、物が現れたり消えたり、位置が変わったりするようなシンプルなものが中心でした。今回は一歩進んで、より動きのある“動的な異変”を追加していきます。

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

動的な異変①:おばけが通過する

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

次に、Hierarchy で右クリックして空のオブジェクトを作成し、名前を 「DynamicAnomalyGroup」 に変更しましょう。

作成した DynamicAnomalyGroup を Hierarchy から選択し、Inspector の Transform を以下の設定にしておきましょう。

Projectウィンドウから

_3DStealthGame > Tutorial_Demo > Demo_Prefabs フォルダ内にある Demo_Ghost を、先ほど作成した DynamicAnomalyGroup へドラッグ&ドロップしましょう。

アタッチした Demo_Ghost を Hierarchy で選択し、Inspector の Transform を以下の設定に変更しましょう。

次に、Hierarchy から DynamicAnomalyGroup をクリックし、右クリックで空のオブジェクトを作成し、DynamicAnomalyGroupの子オブジェクトとなるようにします。作成したオブジェクトの名前を Demo_Ghost_Target に変更しましょう。

作成した Demo_Ghost_Target を Hierarchy から選択し、Inspector の Transform を以下の設定にしておきましょう。

設定が完了したら、Hierarchy から Demo_Ghost を選択し、Inspector 内の Waypoint Patrol (Script) コンポーネントを確認しましょう。

その中の Move Speed を「3」に変更し、Waypoints に新しい要素を追加して、先ほど作成した Demo_Ghost_Target をアタッチします。

設定が完了したら、Demo_Ghost の Inspector 左上にあるチェックボックスをオフにし、オブジェクトを非アクティブ状態にしておきましょう。

次に、前回作成した異変システムに今回の動的異変を追加していきます。

Hierarchy から AnomalySystemOB を選択し、Inspector の Map Anomaly List に新しい要素を追加しましょう。

追加した要素の 表示するオブジェクト(AddObj) には、先ほど作成した Demo_Ghost をアタッチします。

テストがしやすいように、Next Anomaly ForcedTrue に設定し、Number を「9」に変更しておきましょう。

ここまで設定できたら、一度ゲームを再生して動作を確認してみましょう。

部屋に入った瞬間、ゴーストが横切る演出が再生されていれば成功です。

動的な異変②:おばけが突然現れる

オブジェクトの準備

まず、Hierarchy から先ほど作成した Demo_Ghost を選択し、CTRL+D で複製しましょう。

複製したオブジェクトの名前は Jump_Scare_Ghost に変更しておきます。

複製した Jump_Scare_Ghost を Hierarchy から選択し、Inspector 内の Waypoint Patrol (Script) のチェックを外して、動作しない状態にしておきましょう。

AudioSource コンポーネント内の

Play On AwakeLoop のチェックを外しておきましょう。

スクリプトを作成する

Project フォルダから以前作成した script フォルダを開き、右クリックして Create > MonoBehaviour Scriptを選択します。

作成されたスクリプトの名前を JumpScareTrigger にしましょう。

作成した JumpScareTrigger をダブルクリックすると、

Visual Studio(または設定している外部エディター) が起動し、スクリプトが開きます。

JumpScareTriggerに、以下のコードを記述しましょう。

スクリプトの解説

このスクリプトは、

プレイヤーが一定距離まで近づいたときにゴーストのジャンプスケアを発動する仕組みを実装しています。

ゴーストは最初は非表示の状態で、距離条件を満たした瞬間に出現し、音を再生します。

変数の役割

プレイヤーがどれだけ近づいたらジャンプスケアを発動するかを決める距離です。

 

ジャンプスケア時に再生する音声データ(AudioClip)を設定します。

 

音を鳴らすためのコンポーネントを保存します。

 

プレイヤーの位置情報を取得するための変数です。

 

ジャンプスケアが 一度だけ 発動するようにするフラグです。

Start() の処理

このオブジェクトに付いている AudioSource を取得し、

ゲーム開始直後に音が勝手に鳴らないよう playOnAwake をオフにします。

 

Tag が “Player” のオブジェクトを検索し、その Transform を取得します。

もし見つからなかった場合に備えて null チェックをしています。

 

ゴーストの大きさを「0」にして、

ゲーム開始時は見えない状態にしておきます。

Update() の処理

Player が見つからず null のままの場合は、その後の処理をスキップします。

 

今のゴーストの位置とプレイヤーの位置から、

現在の距離をリアルタイムで計算しています。

 

  • プレイヤーが指定距離以内に入っている

  • まだジャンプスケアを発動していない

この2つの条件が揃ったらジャンプスケアが起動します。

 

スケールを 1倍 に戻すことで

一瞬でゴーストが目の前に現れる演出になります。

 

設定されていればジャンプスケア音を再生します。

複雑な構文の追加解説(初心者向け)
Vector3.Distance(a, b) ってどういう仕組?

Vector3.Distance

2点の距離を3次元空間で計算する関数 です。

数学の「距離の公式」を Unity が内部で計算しています。

例:

!hasTriggered の「!」とは何?

「!」は 否定演算子 (NOT) です。

  • hasTriggered が false → !hasTriggered は true

  • hasTriggered が true → !hasTriggered は false

つまりこの条件

「まだ発動していないなら」という意味になります。

transform.localScale = Vector3.zero; の効果

Vector3.zero(0,0,0) のこと。

スケールが 0 になると、

物体は完全に見えなくなる

=レンダリングされません。

逆に出現させるときは

Vector3.one(1,1,1) を表すので元の大きさに戻ります。

スクリプトを実装してみる

スクリプトの入力が完了したら、CTRL+S で保存し、Unity に戻りましょう。

次に、作成した JumpScareTrigger スクリプトを、Hierarchy 内の Jump_Scare_Ghost にドラッグ&ドロップしてアタッチします。

Hierarchy から Jump_Scare_Ghost をクリックして選択します。

その状態で、Inspector を確認し、

Jump Scare Trigger (Script) コンポーネントを探しましょう。

コンポーネント内の JumpScareClip の欄に、

SFXLose を検索してアタッチします。

次に、前回作成した異変システムに今回の動的異変を追加していきます。

Hierarchy から AnomalySystemOB を選択し、Inspector の Map Anomaly List に新しい要素を追加しましょう。

追加した要素の 表示するオブジェクト(AddObj) には、Jump_Scare_Ghost をアタッチします。

テストがしやすいように、Next Anomaly Forced のNumber を「10」に変更しておきましょう。

ここまで設定できたら、一度ゲームを再生して動作を確認してみましょう。

部屋に入り、暖炉へ近づいた際にゴーストが出現すれば成功です。

周回を重ねていく中で、ゴーストが出現したままになる場合がありますが、これは問題ありません。

現在は Next Anomaly ForcedNumber を使って異変を強制的に指定しているため発生している挙動です。本来は「一度出現した異変は再度出ない」仕組みになっており、通常プレイでは正しく制御されます。

今回のプロジェクトファイル

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

まとめと次回予告

今回は、動的な異変を2種類追加しました。

これらのスクリプトは単体でも動作しますが、組み合わせることで、より多彩でユニークな異変を自由に作成できます。ぜひいろいろ試してみてください。

次回はいよいよ クリア演出 を実装していきます。

これが加わることで、ゲーム全体の流れがついにひとつの形として完成します。

次回の記事↓

Unity ホラー風脱出ゲームの作り方8 Canvas UIを用いたフェードイン・アウト処理でクリア演出を作成する
この記事は、Unity ホラー風脱出ゲームの作り方をわかりやすく解説していくシリーズの第8回です。前回はおばけが登場する“びっくり系”の異変を2種類追加し、演出面を強化しました。これにより、ホラーゲームとしての緊張感がぐっと増しました!前回...

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

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

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

【永久会員チケット】

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

全講座を見放題で学ぶ

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

コメント

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