728x90
728x90
이번 포스팅에서는 플레이어와 적의 체력 시스템을 추가하고, 플레이어의 체력이 모두 소진되면 게임이 종료되는 게임 오버 시스템을 구현하겠습니다. 이 기능을 통해 게임의 목표를 명확히 하고, 도전 과제를 부여하여 플레이어가 게임의 종료 조건을 인지하고 즐길 수 있도록 할 것입니다.
1. 플레이어 체력 시스템 구현
먼저, 플레이어의 체력 시스템을 설정하여 적이 플레이어와 충돌할 때 체력을 감소시키도록 해보겠습니다.
1.1 PlayerHealth 스크립트 작성
- Assets > Scripts 폴더에서 PlayerHealth.cs 스크립트를 생성하고, 다음과 같이 작성합니다:
using UnityEngine;
public class PlayerHealth : MonoBehaviour
{
public int maxHealth = 5; // 플레이어의 최대 체력
private int currentHealth;
void Start()
{
currentHealth = maxHealth; // 시작 시 체력 설정
}
public void TakeDamage(int damage)
{
currentHealth -= damage;
if (currentHealth <= 0)
{
Die();
}
}
void Die()
{
// 게임 오버 처리를 위한 함수 호출
GameManager.Instance.GameOver();
}
}
2.Player 오브젝트에 PlayerHealth 스크립트 추가
- Player 오브젝트에 PlayerHealth 스크립트를 추가합니다.
- maxHealth 값을 적절히 설정하여 플레이어의 체력을 조절합니다(예: 5).
1.2 적과의 충돌 시 데미지 처리
- Enemy 오브젝트가 플레이어와 충돌할 때, 플레이어가 데미지를 받도록 설정합니다.
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Player"))
{
PlayerHealth playerHealth = collision.gameObject.GetComponent<PlayerHealth>();
if (playerHealth != null)
{
playerHealth.TakeDamage(1); // 적과 충돌 시 1의 데미지
}
}
}
- EnemyMovement 또는 EnemyHealth 스크립트에 위 코드를 추가하여, 적이 플레이어와 충돌하면 TakeDamage()를 호출해 체력을 감소시킵니다.
2. 게임 매니저 및 게임 오버 시스템 구현
플레이어가 체력을 모두 잃으면 게임 오버 화면이 나타나도록 GameManager 스크립트를 작성해봅니다.
2.1 GameManager 스크립트 작성
- Assets > Scripts 폴더에서 GameManager.cs 스크립트를 생성하고, 다음과 같이 작성합니다
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
public static GameManager Instance; // 싱글톤 설정
void Awake()
{
if (Instance == null)
{
Instance = this;
}
else
{
Destroy(gameObject);
}
}
public void GameOver()
{
// 게임 오버 화면 표시
Debug.Log("Game Over! Restarting...");
// 임시로 2초 후 게임 재시작
Invoke("RestartGame", 2f);
}
void RestartGame()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); // 현재 씬 재시작
}
}
2. GameManager 오브젝트 생성
- Hierarchy 창에서 빈 오브젝트를 생성하여 GameManager로 이름을 지정하고, GameManager 스크립트를 추가합니다.
- 게임이 종료될 때 RestartGame 메서드를 호출해 2초 후 게임을 재시작하도록 합니다.
3. 게임 오버 화면 UI 추가
플레이어에게 게임 오버 상태를 시각적으로 알리기 위해 UI 텍스트를 추가합니다.
3.1 Game Over 텍스트 추가
- Canvas 생성:
- Hierarchy 창에서 UI > Canvas를 선택하여 새 캔버스를 생성합니다.
- Text 추가:
- Canvas의 자식으로 UI > Text를 추가하고 이름을 GameOverText로 변경합니다.
- 텍스트 내용을 **"Game Over"**로 설정하고, Font Size와 Color를 조정하여 가시성을 높입니다.
- Rect Transform의 위치를 중앙으로 조정하고, 기본적으로 비활성화합니다.
3.2 Game Over UI 활성화 코드 추가
- GameManager 스크립트의 GameOver() 메서드를 수정하여 GameOverText를 활성화합니다.
public GameObject gameOverUI; // 게임 오버 UI를 연결할 필드 추가
public void GameOver()
{
Debug.Log("Game Over! Restarting...");
gameOverUI.SetActive(true); // 게임 오버 UI 활성화
Invoke("RestartGame", 2f); // 게임 재시작 (임시)
}
2.Inspector에서 gameOverUI 필드에 GameOverText를 드래그하여 연결합니다.
4. 테스트 및 조정
- Play 모드로 실행
- 플레이어가 적과 충돌할 때 체력이 줄어드는지 확인합니다.
- 체력이 모두 소진되면 Game Over UI가 나타나고, 잠시 후 게임이 재시작되는지 확인합니다.
- 난이도 조정
- 플레이어의 체력과 적의 데미지 값을 조정하여 적절한 난이도로 설정합니다.
5. 정리 및 다음 단계 예고
이번 포스팅에서는 플레이어 체력 시스템과 게임 오버 시스템을 구현하여, 플레이어가 체력을 모두 소진하면 게임이 종료되는 기능을 추가했습니다. 이제 게임의 주요 구조가 완성되었습니다! 다음 포스팅에서는 게임 클리어 목표 설정 및 UI 최종 정리를 통해 게임을 마무리해 보겠습니다.
완성까지 얼마 남지 않았으니 끝까지 함께 가봅시다!
728x90
'유니티 > 탑 다운 슈팅 게임 만들기' 카테고리의 다른 글
탑다운 슈팅 게임 만들기 #6 – 게임 클리어 목표 및 UI 최종 정리 (0) | 2024.11.13 |
---|---|
탑다운 슈팅 게임 만들기 #4 – 적 스폰 시스템 구현하기 (0) | 2024.11.11 |
탑다운 슈팅 게임 만들기 #3 – 적 캐릭터 및 기본 AI 구현 (2) | 2024.11.10 |
탑다운 슈팅 게임 만들기 #2 – 플레이어 슈팅 메커니즘 구현하기 (1) | 2024.11.09 |
탑다운 슈팅 게임 만들기 #1 – 프로젝트 설정 및 플레이어 컨트롤 구현 (2) | 2024.11.08 |