게임을 하다보면 여러가지 상태가 있을 것이다.
1. 게임 실패
2. 게임 성공
3. 새로운 게 임
위와 같은 게임의 상태를 관리하기 위해 State Pattern을 사용해 각 게임상태를 관리해보자.
상황
1. 목표점수를 달성하지 못하거나 시간초가 오버돼 게임에 실패했을 경우
- 다시하기를 통해 목표점수 그대로 도전한다.
2. 목표점수를 달성해 다음 단계로 넘어가야할 경우
- 다음단계를 통해 다음 목표점수로 도전한다.
3. 새로운 게임을 시작할 경우
- 초기 목표점수로 게임을 새롭게 도전한다.
우선 State Pattern의 기반을 제공할 인터페이스 스크립트를 만들자.
1. State Pattern의 기반을 제공할 인터페이스 스크립트 - IGameState.cs
게임의 다양한 상태(예: NewGame, CurrentGame, NextGame, GameOver)를 독립적으로 정의하고,
각 상태에서 수행해야 할 동작을 통합적으로 관리하기 위한 구조를 제공
2. 게임 상태를 관리할 수 있는 값들을 GameManager에서 변수를 추가해주자.
또한 상태체크를 할 수 있는 변수를 추가후 업데이트에서도 체크해주자
- ?. 연산자는 null 체크를 안전하게 수행하는 기능을 한다.
- 변수(CurrentState)가 null일 수도 있기 때문에 - ?. (Null-Conditional Operator)**를 사용한다.
- 만약 currentState가 null이면 아무 작업도 하지 않고 바로 다음 코드로 넘어간다.
현재 상태를 새로운 상태로 변경하는 메서드를 추가하고 적용시켜주자
3. State Pattern을 사용하여 게임의 주요 상태를 정의하고 관리할 스크립트 - NewGameState.cs
각 상태(NewGame, CurrentGame, NextGame, GameOver)는 IGameState 인터페이스를 구현하여 상태별로
- 초기화(EnterState),
- 동작(UpdateState),
- 종료(ExitState)
를 처리GameManager는 이 상태들을 관리하며, 상태 간의 전환이 유연하게 이루어진다.
3.1 - 각 상태에 맞는 클래스들 생성(새로운 게임, 다음 게임, 현재 게임, 게임 오버)
3.2 - 각 상태 클래스에 맞게 조건 수정
새로운 게임 | 다음 게임 |
![]() |
![]() |
현재 게임 | 게임 오버 |
![]() |
![]() |
3.3 - 각 상태 클래스에 상황에 맞게 적용
새로운 게임 (로비에서 게임시작 버튼) | 다음 게임 (성공 팝업에서 다음단계 버튼) |
![]() |
![]() |
현재 게임 (실패 팝업에서 다시하기 버튼) | 게임 오버 (60초 시간 오버로 게임 종료) |
![]() |
![]() |
결과
로비씬에서 새로운 게임을 생성 했을 경우
성공 후 다음 게임으로 넘어갈 때
실패 후 게임을 다시하기 할 경우
'프로젝트 > 스네이크 프로젝트' 카테고리의 다른 글
[스네이크] - State Pattern을 추가 한 뒤 바뀐 UI 표시(점수, 시간) 수정 (0) | 2025.01.18 |
---|---|
[스네이크] - UI 표시(종료, 성공) 팝업 (0) | 2024.12.24 |
[스네이크] - UI 표시(점수, 시간) (0) | 2024.12.17 |
[스네이크] - 비동기 씬전환, 페이드 효과 (0) | 2024.12.10 |
[스네이크] - 로비 만들기(닉네임 생성 및 게임 시작) - 게임 시작 UI (1) | 2024.12.05 |