본문 바로가기
유니티/닷지 게임 만들기

Dodge Game 만들기 #3 - 충돌 처리와 플레이어 체력 시스템

by 찡사랑방 2024. 11. 17.
728x90
728x90

이전 포스팅에서는 적이 플레이어를 추적하도록 설정하고, 적을 무작위로 생성하는 스폰 시스템을 만들었습니다. 이번에는 적과의 충돌을 처리하고, 플레이어의 체력을 관리하는 체력 시스템을 구현해 보겠습니다. 체력 시스템은 게임의 생존 요소를 부각시키며, 플레이어에게 긴장감을 제공합니다.


1. 플레이어 체력 시스템 구현

1.1 PlayerHealth 스크립트 작성

  1. Assets > Scripts 폴더에서 PlayerHealth.cs라는 새 스크립트를 생성합니다.
  2. 아래와 같이 작성합니다
using UnityEngine;

public class PlayerHealth : MonoBehaviour
{
    public int maxHealth = 3; // 최대 체력
    private int currentHealth;

    public GameObject gameOverUI; // 게임 오버 UI

    void Start()
    {
        currentHealth = maxHealth; // 체력을 초기화
    }

    public void TakeDamage(int damage)
    {
        currentHealth -= damage;
        Debug.Log($"Player Health: {currentHealth}");

        if (currentHealth <= 0)
        {
            Die();
        }
    }

    void Die()
    {
        Debug.Log("Player Died!");
        gameOverUI.SetActive(true); // 게임 오버 UI 표시
        Time.timeScale = 0f;       // 게임 정지
    }

    public void RestartGame()
    {
        Time.timeScale = 1f; // 시간 재개
        UnityEngine.SceneManagement.SceneManager.LoadScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene().buildIndex);
    }
}

 

1.2 스크립트 적용

  1. Player 오브젝트에 PlayerHealth 스크립트를 추가합니다.
  2. Inspector에서 maxHealth 값을 설정합니다 (예: 3).
  3. 게임 오버 시 표시할 텍스트를 추가합니다:
    • Canvas에서 텍스트 오브젝트를 생성하고 이름을 GameOverText로 지정합니다.
    • 텍스트 내용은 **"Game Over"**로 설정합니다.
    • 기본적으로 비활성화(Inactive) 상태로 설정합니다.
  4. PlayerHealth gameOverUI 필드에 GameOverText를 드래그하여 연결합니다.

2. 적과 충돌 처리

플레이어가 적과 충돌했을 때 체력을 감소시키도록 설정합니다.

2.1 충돌 감지 추가

  1. 적 프리팹(Enemy)에 Circle Collider 2D를 추가하고, 충돌 영역을 적절히 설정합니다.
  2. 적에 Rigidbody2D가 이미 추가되어 있어야 하며, Body Type은 Dynamic으로 설정합니다.
    • Is Trigger를 체크하여 충돌을 트리거로 처리합니다.

2.2 EnemyDamage 스크립트 작성

  1. Assets > Scripts 폴더에서 EnemyDamage.cs라는 새 스크립트를 생성합니다.
  2. 아래와 같이 작성합니다
using UnityEngine;

public class EnemyDamage : MonoBehaviour
{
    public int damage = 1; // 적이 줄 피해량

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            PlayerHealth playerHealth = other.GetComponent<PlayerHealth>();
            if (playerHealth != null)
            {
                playerHealth.TakeDamage(damage); // 플레이어에게 피해 입히기
            }
            Destroy(gameObject); // 충돌 후 적 제거
        }
    }
}

 

 

    3. Enemy 프리팹에 EnemyDamage 스크립트를 추가합니다.


3. 체력 UI 추가

3.1 체력 표시를 위한 UI 생성

  1. Canvas Horizontal Layout Group을 사용하여 체력 UI를 구성합니다.
    • Hierarchy > Create > UI > Panel을 선택하고, 이름을 HealthPanel로 설정합니다.
    • Panel 아래에 여러 개의 Image를 추가하여 체력 아이콘을 만듭니다 (예: 하트 모양).
    • 기본적으로 Image를 3개 추가하여 체력을 나타냅니다.

3.2 PlayerHealth에 UI 업데이트 추가

  1. PlayerHealth 스크립트를 수정하여 체력 UI를 업데이트하도록 설정합니다.
public GameObject[] healthIcons; // 체력 아이콘 배열

public void TakeDamage(int damage)
{
    currentHealth -= damage;
    Debug.Log($"Player Health: {currentHealth}");

    UpdateHealthUI();

    if (currentHealth <= 0)
    {
        Die();
    }
}

void UpdateHealthUI()
{
    for (int i = 0; i < healthIcons.Length; i++)
    {
        healthIcons[i].SetActive(i < currentHealth);
    }
}

 

2. Inspector에서 healthIcons 필드에 체력 아이콘 오브젝트를 드래그하여 연결합니다.

 

4. 테스트 및 조정

  1. Play 모드로 실행
    • 플레이어가 적과 충돌하면 체력이 감소하고, 체력이 0이 되면 게임 오버 화면이 표시되는지 확인합니다.
    • 적이 충돌 후 삭제되는지 확인합니다.
  2. 난이도 조정
    • **적의 피해량(damage)**이나 플레이어 체력(maxHealth) 값을 조정하여 적절한 난이도로 설정합니다.

5. 다음 단계 예고

이번 포스팅에서는 충돌 처리 체력 시스템을 추가하여 게임에 생존 요소를 구현했습니다. 이제 게임이 한층 더 긴장감 넘치게 되었을 것입니다! 다음 포스팅에서는 점수 시스템과 아이템 기능을 추가하여 플레이어가 더욱 몰입할 수 있도록 만들어 보겠습니다.

게임 개발의 재미를 느끼며, 다음 단계에서 만나요! 🎮

728x90