게임에서 생존 요소는 플레이어의 몰입감을 높이는 중요한 부분입니다. 특히 서바이벌 장르의 게임에서는 목마름과 허기뿐만 아니라, 다양한 생리적, 심리적 요소들이 게임의 중요한 기초가 됩니다. 이번 글에서는 Unity에서 목마름, 허기 외에도 체력기분 시스템을 추가하여, 더욱 실감나는 생존 시스템을 구현하는 방법을 소개하겠습니다.

1. 목마름, 허기 외에도 필요한 시스템

목마름과 허기 시스템은 플레이어의 기본적인 생리적 욕구를 충족시키기 위한 시스템입니다. 그러나 게임을 더욱 깊이 있게 만들기 위해서는 체력기분을 추가할 필요가 있습니다.

  • 체력 시스템: 플레이어가 생명력을 관리하고, 여러 상태에서 회복하거나 손실될 수 있는 중요한 요소입니다.
  • 기분 시스템: 허기나 목마름으로 인해 플레이어의 기분이 나빠지거나, 플레이어의 상호작용과 행동에 영향을 미칠 수 있습니다. 기분은 게임 내에서 다양한 변화를 유도할 수 있습니다.

2. 각각의 시스템 설명

  • 목마름: 물을 마시지 않으면 점차 증가하며, 일정 수치 이하로 떨어지면 체력이 지속적으로 감소합니다.
  • 허기: 음식을 먹지 않으면 증가하고, 일정 수치 이하로 떨어지면 체력이 급격하게 감소합니다.
  • 체력: 플레이어의 생명력을 나타내며, 다양한 요소(목마름, 허기, 외상 등)에 의해 영향을 받습니다.
  • 기분: 허기와 목마름, 그리고 체력 상태가 좋지 않으면 기분이 나빠져서 플레이어의 행동에 부정적인 영향을 미칠 수 있습니다. 예를 들어, 기분이 나쁘면 이동 속도가 감소하거나, 대화나 상호작용이 제한될 수 있습니다.

3. 각각의 시스템 코드 구현

이제 Unity에서 생존 시스템을 어떻게 구현할지에 대해 구체적으로 살펴보겠습니다. 아래는 목마름, 허기, 체력, 기분 시스템을 모두 포함한 코드 예시입니다.

using UnityEngine;

public class SurvivalSystem : MonoBehaviour
{
    // 생리적 상태 변수
    public float hunger = 100f;  // 허기
    public float thirst = 100f;  // 목마름
    public float health = 100f;  // 체력
    public float mood = 100f;    // 기분

    // 상태 변화율
    public float hungerRate = 0.1f;
    public float thirstRate = 0.1f;

    // 상태 임계값
    public float hungerThreshold = 20f;
    public float thirstThreshold = 20f;
    public float moodThreshold = 40f;

    // 최대 값
    private float maxHunger = 100f;
    private float maxThirst = 100f;
    private float maxHealth = 100f;
    private float maxMood = 100f;

    void Update()
    {
        // 시간에 따라 상태 변화
        hunger += hungerRate * Time.deltaTime;
        thirst += thirstRate * Time.deltaTime;

        // 상태가 임계값 이하로 떨어질 때 부정적인 효과
        if (hunger <= hungerThreshold)
        {
            // 허기 상태에서 체력 감소
            health -= 0.5f * Time.deltaTime;
            mood -= 0.3f * Time.deltaTime;  // 기분 나빠짐
            Debug.Log("허기로 체력 감소 및 기분 나빠짐");
        }

        if (thirst <= thirstThreshold)
        {
            // 목마름 상태에서 체력 감소
            health -= 0.5f * Time.deltaTime;
            mood -= 0.3f * Time.deltaTime;  // 기분 나빠짐
            Debug.Log("목마름으로 체력 감소 및 기분 나빠짐");
        }

        // 체력이 0 이하로 떨어지면 게임 오버
        if (health <= 0)
        {
            Debug.Log("체력이 다 떨어져서 게임 오버");
            // 게임 오버 처리 코드
        }

        // 기분이 나쁘면 이동 속도 감소
        if (mood <= moodThreshold)
        {
            // 기분에 따라 이동 속도 감소
            Debug.Log("기분이 나빠져서 이동 속도 감소");
            // 이동 속도 감소 코드 삽입
        }

        // 상태가 100을 넘지 않도록 제한
        hunger = Mathf.Clamp(hunger, 0f, maxHunger);
        thirst = Mathf.Clamp(thirst, 0f, maxThirst);
        health = Mathf.Clamp(health, 0f, maxHealth);
        mood = Mathf.Clamp(mood, 0f, maxMood);
    }

    // 음식을 먹어서 허기 회복
    public void Eat(float amount)
    {
        hunger = Mathf.Clamp(hunger + amount, 0f, maxHunger);
        mood += 0.2f * amount;  // 기분 개선
        Debug.Log("음식을 먹어서 허기 회복 및 기분 개선");
    }

    // 물을 마셔서 목마름 회복
    public void Drink(float amount)
    {
        thirst = Mathf.Clamp(thirst + amount, 0f, maxThirst);
        mood += 0.2f * amount;  // 기분 개선
        Debug.Log("물을 마셔서 목마름 회복 및 기분 개선");
    }

    // 휴식을 취하여 체력 회복
    public void Rest(float amount)
    {
        health = Mathf.Clamp(health + amount, 0f, maxHealth);
        mood += 0.3f * amount;  // 기분 개선
        Debug.Log("휴식을 취해서 체력 회복 및 기분 개선");
    }
}

4. 게임에서 활용되는 예시

위 코드에서는 목마름, 허기, 체력, 기분 시스템을 실시간으로 업데이트하고, 상태가 일정 수준 이하로 떨어지면 플레이어에게 부정적인 효과를 주도록 구현하였습니다. 이 시스템은 다양한 상황에 따라 플레이어의 행동에 영향을 미칠 수 있습니다.

  1. 허기와 목마름: 플레이어가 허기나 목마름 상태일 때 체력 감소와 기분 변화가 발생합니다. 허기와 목마름이 심해지면 체력이 급격히 떨어지거나 기분이 나빠져서 다른 시스템에 영향을 줄 수 있습니다.
  2. 체력과 기분: 체력이 낮아지면 플레이어의 행동에 부정적인 영향을 미칩니다. 또한 기분이 나쁘면 이동 속도가 느려지거나, 상호작용이 제한될 수 있습니다.

5. 고급 활용 예시

이 시스템은 더욱 복잡하게 확장될 수 있습니다. 예를 들어, 플레이어가 환경에서 자원을 수집하거나, 캠프파이어에서 음식을 조리하는 등의 상호작용을 추가하여 더욱 몰입감 있는 게임 경험을 제공할 수 있습니다.

// 캠프파이어에서 음식을 조리하는 예시
public void CookFood(float foodAmount)
{
    if (thirst > thirstThreshold && hunger > hungerThreshold)
    {
        Eat(foodAmount);  // 음식을 먹음으로써 허기 회복
        Drink(foodAmount * 0.5f);  // 조리된 음식으로 목마름도 회복
        Debug.Log("캠프파이어에서 음식을 조리하고 허기, 목마름 회복");
    }
    else
    {
        Debug.Log("허기나 목마름이 너무 심해서 음식을 조리할 수 없음");
    }
}

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다