Unity에서 스텔스 메커니즘 추가

스텔스 메커니즘은 플레이어가 적에게 감지되지 않도록 하는 게임플레이 시스템입니다. *Assassin's Creed*나 *Hitman*과 같은 스텔스 기반 게임에서 일반적으로 사용되는 이러한 메커니즘에는 시야 원뿔, 소리 감지, 은신처, 플레이어 가시성 수준과 같은 기능이 포함됩니다. 스텔스 메커니즘을 추가하면 전략적 사고를 장려하고 신중한 계획에 대한 보상을 제공하여 게임플레이를 더욱 매력적으로 만들 수 있습니다.

이 튜토리얼에서는 Unity에서 기본적인 스텔스 메커니즘을 만들어 보겠습니다. 플레이어는 시야 원뿔을 가진 적에게 감지되지 않도록 합니다. 플레이어가 원뿔에 들어가면 감지됩니다.

1단계: 장면 설정

간단한 Unity 장면을 만드는 것으로 시작하세요.

  1. 새로운 Unity 프로젝트를 만듭니다.
  2. 비행기를 추가하여 지면 역할을 하세요.
  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 GameObject에 Player 태그가 있는지 확인하세요.

4단계: 플레이어 가시성 추가

다음으로, 탐지를 더 동적으로 만들기 위해 가시성 메커니즘을 구현해 보겠습니다. 플레이어가 웅크리고 있거나 숨으면 탐지하기 더 어려워질 것입니다.

  1. PlayerVisibility라는 새로운 스크립트를 만듭니다.
  2. 플레이어 게임오브젝트에 연결합니다.
  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에서 시야 원뿔과 가시성 수준을 포함한 기본 스텔스 메커니즘을 구현했습니다. 이러한 시스템은 더 복잡한 스텔스 게임플레이의 기반이 될 수 있습니다. 추가 기능을 실험하여 게임에 완전히 몰입할 수 있는 스텔스 경험을 만들어 보세요.