Unity にステルス メカニクスを追加する

ステルス メカニクスは、プレイヤーが敵に発見されるのを回避できるようにするゲームプレイ システムです。*アサシン クリード* や *ヒットマン* などのステルス ベースのゲームでよく使用されるこれらのメカニクスには、視界コーン、音検出、隠れ場所、プレイヤーの視認性レベルなどの機能が含まれます。ステルス メカニクスを追加すると、戦略的思考が促進され、慎重な計画が報われるため、ゲームプレイがより魅力的になります。

このチュートリアルでは、Unity で基本的なステルス メカニクスを作成します。プレイヤーは、視界コーンを持つ敵による検出を回避します。プレイヤーがコーンに入ると、検出されます。

ステップ1: シーンの設定

まず、シンプルな Unity シーンを作成します。

  1. 新しい Unity プロジェクトを作成します。
  2. 地面として機能する Plane を追加します。
  3. プレーヤーを表す 3D モデル (例: カプセル) を追加します。
  4. を表す別の 3D モデル (例: 立方体) を追加します。
  5. プレイヤーと敵を飛行機上の異なる場所に配置します。

ステップ2: 敵の視界コーンを作成する

円錐形のトリガー領域を使用して敵の視界をシミュレートします。

  1. 階層を右クリックし、作成 > 3D オブジェクト > 円柱 を選択します。
  2. スケールを調整して、円柱のサイズを変更し、円錐のように見えるようにします (例: X = 1、Y = 0.5、Z = 1)。
  3. 平らなベースが前を向くように回転させます (例: 回転 X = 90)。
  4. それを Enemy GameObject の子としてアタッチします。
  5. 円錐の ColliderTrigger に設定します。
  6. 敵の視野に合わせてスケールと位置を調整します。

ステップ3: 敵検出スクリプトの作成

次に、視野内のプレイヤーを検出するためのスクリプトを作成しましょう。

  1. EnemyVision という C# スクリプトを作成します。
  2. スクリプトを Enemy GameObject にアタッチします。
  3. 次のコードを使用します。
using UnityEngine;

public class EnemyVision : MonoBehaviour
{
    public bool playerDetected = false;

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = true;
            Debug.Log("Player Detected!");
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = false;
            Debug.Log("Player Lost!");
        }
    }
}

このスクリプトは、プレイヤーがビジョン コーンに入ったか、またはビジョン コーンから出たかをチェックします。プレイヤー ゲームオブジェクトに Player タグが付いていることを確認します。

ステップ4: プレーヤーの可視性を追加する

次に、検出をより動的にするための可視性メカニズムを実装しましょう。しゃがんだり隠れたりすると、プレイヤーは検出されにくくなります。

  1. PlayerVisibility という新しいスクリプトを作成します。
  2. それを Player GameObject にアタッチします。
  3. 次のコードを使用します。
using UnityEngine;

public class PlayerVisibility : MonoBehaviour
{
    public float visibility = 1.0f; // Full visibility

    void Update()
    {
        // Reduce visibility when crouching (e.g., pressing "C")
        if (Input.GetKey(KeyCode.C))
        {
            visibility = 0.5f;
            Debug.Log("Crouching: Reduced visibility!");
        }
        else
        {
            visibility = 1.0f; // Default visibility
        }
    }
}

このスクリプトは、プレイヤーの行動に基づいてプレイヤーの可視性レベルを調整します。敵は後でこの値を使用して、プレイヤーがどれだけ簡単に検出されるかを決定できます。

ステップ5: 敵の検出を強化する

次に、可視性と検出を組み合わせてみましょう。EnemyVision スクリプトを次のように変更します。

using UnityEngine;

public class EnemyVision : MonoBehaviour
{
    public bool playerDetected = false;

    void OnTriggerStay(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            PlayerVisibility playerVisibility = other.GetComponent<PlayerVisibility>();

            if (playerVisibility != null && playerVisibility.visibility > 0.75f)
            {
                playerDetected = true;
                Debug.Log("Player Detected with high visibility!");
            }
            else
            {
                Debug.Log("Player not visible enough to detect.");
            }
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = false;
            Debug.Log("Player Lost!");
        }
    }
}

このスクリプトは、プレーヤーの可視性レベルを使用して、プレーヤーが検出されるかどうかを判断します。

ステップ6: ステルス機構のテスト

セットアップをテストするには:

  1. Unity エディタの 再生 ボタンを押します。
  2. 検出をトリガーするには、プレイヤーを敵の視界コーン内に移動します。
  3. しゃがみボタン(例:"C")を押して視界を狭め、検出にどのような影響があるかをテストします。

オプションの拡張機能

ステルス メカニズムを拡張するためのアイデアをいくつか紹介します。

  • サウンド検出: 敵がプレイヤーの出す音 (走る音など) に基づいてプレイヤーを検出するメカニズムを追加します。
  • 隠れ場所: プレイヤーが見つからない隠れ場所を作成します。
  • 敵の巡回: Unity の NavMesh システムを使用して、設定されたパスに沿って敵を巡回するようにプログラムします。
  • 警戒状態: 敵の警戒レベルを追加します (例: 疑わしい、捜索中、攻撃的)。

結論

Unity には、視界コーンや可視性レベルなどの基本的なステルス メカニズムが実装されています。これらのシステムは、より複雑なステルス ゲームプレイの基盤として機能します。追加機能を試して、ゲームに完全に没入できるステルス エクスペリエンスを作りましょう。