Unity에서 승리 조건 구현

많은 게임에서 명확한 승리 조건은 플레이어가 성공한 시점을 결정하는 데 필수적입니다. 이 튜토리얼에서는 Unity에 간단한 승리 조건을 구현합니다. 이 조건은 플레이어가 특정 기준(예: 아이템 수집, 적 처치 또는 목적지 도달)을 충족하는지 확인하고 해당 조건이 충족되면 승리 상태를 트리거합니다.

1. 승리 조건 정의

시스템을 구현하기 전에, 게임에서 승리하는 것이 무엇인지 정의해야 합니다. 이 예에서는 플레이어가 레벨에서 필요한 모든 아이템을 수집하여 승리한다고 가정합니다. 적을 물리치거나 목표를 달성하는 등 다른 게임 유형에 맞게 이를 수정할 수 있습니다.

2. Win Manager 만들기

WinManager 스크립트는 승리 조건을 확인하는 로직을 처리합니다. 플레이어가 필요한 모든 아이템을 수집했는지 확인하는 시스템을 만들고, 수집한 경우 승리 이벤트를 트리거합니다.

using UnityEngine;

public class WinManager : MonoBehaviour
{
    public int totalItems = 5; // Total number of items needed to win
    private int collectedItems = 0; // Counter for collected items

    // Call this method when the player collects an item
    public void CollectItem()
    {
        collectedItems++;
        Debug.Log("Item collected. " + collectedItems + "/" + totalItems);

        // Check if the player has collected all items
        if (collectedItems >= totalItems)
        {
            WinGame();
        }
    }

    // This method is called when the player wins
    private void WinGame()
    {
        Debug.Log("You win!");
        // Here you can add more win logic like displaying a UI or stopping the game
        // For example, load a win scene:
        // SceneManager.LoadScene("WinScene");
    }
}

WinManager 스크립트는 플레이어가 수집한 아이템 수를 추적합니다. 플레이어가 모든 아이템을 수집하면(또는 승리 조건을 충족하면) WinGame() 메서드가 호출되어 간단한 "당신이 이겼습니다!"라는 메시지가 표시됩니다. 이를 쉽게 확장하여 승리 화면을 표시하거나 새 장면으로 전환할 수 있습니다.

3. 아이템 수집 시스템 설정

이제 플레이어가 아이템을 수집할 수 있는 시스템을 만들 것입니다. 이는 플레이어가 수집 가능한 객체와 충돌할 때를 감지하여 수행할 수 있습니다.

using UnityEngine;

public class CollectibleItem : MonoBehaviour
{
    public WinManager winManager;

    // When the player collides with the item, it is collected
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            winManager.CollectItem(); // Notify the WinManager
            Destroy(gameObject); // Remove the collected item from the scene
        }
    }
}

이 스크립트는 플레이어가 아이템과 충돌할 때를 감지하고 WinManager에 아이템이 수집되었음을 알립니다. 아이템이 수집되면 씬에서 파괴됩니다.

4. 승리 조건에 대한 UI 구현

플레이어가 이겼을 때 알려주는 것이 중요합니다. 플레이어가 모든 아이템을 모았을 때 메시지를 표시하는 간단한 UI를 만들 것입니다.

  1. 씬에 캔버스를 만듭니다(GameObject > UI > Canvas).
  2. 캔버스에 텍스트 요소를 추가하여 "당신이 이겼습니다!"라는 메시지를 표시합니다.
  3. WinManager 스크립트에서 이 텍스트 요소를 참조하고 플레이어가 이길 때 해당 텍스트 요소의 가시성을 업데이트합니다.
using UnityEngine;
using UnityEngine.UI;

public class WinManager : MonoBehaviour
{
    public int totalItems = 5;
    private int collectedItems = 0;
    public Text winText; // Reference to the "You Win!" text UI

    public void CollectItem()
    {
        collectedItems++;
        Debug.Log("Item collected. " + collectedItems + "/" + totalItems);

        if (collectedItems >= totalItems)
        {
            WinGame();
        }
    }

    private void WinGame()
    {
        Debug.Log("You win!");
        winText.text = "You Win!"; // Show the win message
        winText.gameObject.SetActive(true); // Make the message visible
        Time.timeScale = 0; // Stop the game (optional)
    }
}

위 코드에서 플레이어가 이길 경우 winText 텍스트 구성 요소가 업데이트되어 "당신이 이겼습니다!"라는 메시지가 표시되고 Time.timeScale = 0;을 사용하여 게임이 일시 정지됩니다.

5. 승리 조건 테스트

게임을 플레이하고 플레이어가 모든 아이템을 모았을 때 승리 조건이 트리거되는지 확인합니다. 화면에 "You Win!" 메시지가 표시되고 게임이 일시 중지됩니다. 장면 전환을 사용하는 경우 게임이 종료되었음을 나타내기 위해 새 장면을 로드할 수도 있습니다.

승리 조건 확장

게임 유형에 따라 승리 조건을 다음과 같은 추가 요소로 확장할 수 있습니다.

  • 레벨에 있는 모든 적을 물리칩니다.
  • 제한된 시간 내에 특정 위치에 도착하는 것.
  • 일련의 작업이나 목표를 완료합니다.

이러한 조건은 새로운 스크립트를 만들거나 다양한 시나리오를 고려하여 WinManager을 수정하여 비슷한 방식으로 추가할 수 있습니다.

결론

우리는 아이템 수집을 기반으로 Unity에 간단한 승리 조건을 구현했습니다. 이 시스템은 유연하며 다른 게임 메커니즘에 쉽게 적용할 수 있습니다. UI와 적절한 게임 흐름을 추가하면 이제 게임에서 승리 조건을 트리거하는 기본 구조가 생깁니다.