Unity にステルス メカニクスを追加する
ステルス メカニクスは、プレイヤーが敵に発見されるのを回避できるようにするゲームプレイ システムです。*アサシン クリード* や *ヒットマン* などのステルス ベースのゲームでよく使用されるこれらのメカニクスには、視界コーン、音検出、隠れ場所、プレイヤーの視認性レベルなどの機能が含まれます。ステルス メカニクスを追加すると、戦略的思考が促進され、慎重な計画が報われるため、ゲームプレイがより魅力的になります。
このチュートリアルでは、Unity で基本的なステルス メカニクスを作成します。プレイヤーは、視界コーンを持つ敵による検出を回避します。プレイヤーがコーンに入ると、検出されます。
ステップ1: シーンの設定
まず、シンプルな Unity シーンを作成します。
- 新しい Unity プロジェクトを作成します。
- 地面として機能する Plane を追加します。
- プレーヤーを表す 3D モデル (例: カプセル) を追加します。
- 敵を表す別の 3D モデル (例: 立方体) を追加します。
- プレイヤーと敵を飛行機上の異なる場所に配置します。
ステップ2: 敵の視界コーンを作成する
円錐形のトリガー領域を使用して敵の視界をシミュレートします。
- 階層を右クリックし、作成 > 3D オブジェクト > 円柱 を選択します。
- スケールを調整して、円柱のサイズを変更し、円錐のように見えるようにします (例: X = 1、Y = 0.5、Z = 1)。
- 平らなベースが前を向くように回転させます (例: 回転 X = 90)。
- それを Enemy GameObject の子としてアタッチします。
- 円錐の Collider を Trigger に設定します。
- 敵の視野に合わせてスケールと位置を調整します。
ステップ3: 敵検出スクリプトの作成
次に、視野内のプレイヤーを検出するためのスクリプトを作成しましょう。
- EnemyVision という C# スクリプトを作成します。
- スクリプトを Enemy GameObject にアタッチします。
- 次のコードを使用します。
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: プレーヤーの可視性を追加する
次に、検出をより動的にするための可視性メカニズムを実装しましょう。しゃがんだり隠れたりすると、プレイヤーは検出されにくくなります。
- PlayerVisibility という新しいスクリプトを作成します。
- それを Player GameObject にアタッチします。
- 次のコードを使用します。
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: ステルス機構のテスト
セットアップをテストするには:
- Unity エディタの 再生 ボタンを押します。
- 検出をトリガーするには、プレイヤーを敵の視界コーン内に移動します。
- しゃがみボタン(例:"C")を押して視界を狭め、検出にどのような影響があるかをテストします。
オプションの拡張機能
ステルス メカニズムを拡張するためのアイデアをいくつか紹介します。
- サウンド検出: 敵がプレイヤーの出す音 (走る音など) に基づいてプレイヤーを検出するメカニズムを追加します。
- 隠れ場所: プレイヤーが見つからない隠れ場所を作成します。
- 敵の巡回: Unity の NavMesh システムを使用して、設定されたパスに沿って敵を巡回するようにプログラムします。
- 警戒状態: 敵の警戒レベルを追加します (例: 疑わしい、捜索中、攻撃的)。
結論
Unity には、視界コーンや可視性レベルなどの基本的なステルス メカニズムが実装されています。これらのシステムは、より複雑なステルス ゲームプレイの基盤として機能します。追加機能を試して、ゲームに完全に没入できるステルス エクスペリエンスを作りましょう。