기존에는 아이템들을 ScriptableObject로 관리하고, 각 아이템 오브젝트가 OnTriggerEnter2D를 통해 플레이어와 충돌 시 작동하는 방식으로 구현했다.
그러나 아이템을 추가하면서, 각 챕터마다 다른 스프라이트와 점수를 가진 아이템들을 관리해야 하는 상황이 생겼다. 기존 방식으로는 switch문이나 개별 스크립트를 수정해야 했기 때문에, 확장성과 유지보수하는데 불편함을 느꼈다.
이를 개선하기 위해 IItem 인터페이스를 만들고, 각 아이템 클래스가 이를 구현하도록 구조를 변경했다.
- 인터페이스를 구현하면 아이템마다 별도의 스크립트를 수정하지 않아도, 공통된 방식으로 효과를 적용할 수 있다.
- OnTriggerEnter2D 방식은 그대로 유지하면서, 각 아이템의 효과는 IItem 인터페이스를 통해 처리된다.
- 이렇게 하면 새로운 아이템 추가나 기존 아이템 수정 시에도 코드 수정 범위를 최소화할 수 있어, 유지보수와 확장성이 크게 향상된다.
우선 간단하게 IItem 인터페이스를 구현하여, 아이템의 이름(Name)과 획득 시 발생하는 효과에 대한 메서드만 정의했다.
각 아이템 클래스에서는 이 인터페이스를 구현 하도록 작성하여, 아이템마다 서로 다른 효과를 효율적으로 적용할 수 있었다.
이 방식 덕분에 기존처럼 switch문으로 분기하거나 개별 스크립트를 일일이 수정할 필요 없이, 새로운 아이템을 추가할 때도 공통 인터페이스 구조만 유지하면 쉽게 기능을 확장할 수 있다.
// 간단하게 구현한 Item 인터페이스
using System.Collections;
using System.Collections.Generic;
public enum ItemType
{
Coin,
GiantItem,
SpeedItem,
ShieldItem,
HealItem,
ScoreItem
}
public interface IItem
{
ItemType Type { get; } // 아이템 종류
void OnPickUp(GameManager gm);
}

게임 시작 전 카운트다운 도중 버튼을 통해 캐릭터의 행동이 가능하던 현상
GameManager에서 게임이 시작하면 isGameStart값이 true가 되는데 이 Bool 변수를 사용해 각 사용가능한 버튼들에게 조건을 추가해 버튼들을 제어하도록 수정했습니다.
스테이지 도전 시 행동력 소모 처리
스테이지 진입 과정에 행동력(스태미나) 소모 시스템을 추가했다.
현재 구조는 다음과 같다.
- 스테이지 도전 시: 게임 플레이 시작
- 스테이지 클리어 실패 후
- 재도전: 추가 차감 없이 그대로 진행
- 포기: LobbyScene으로 이동, 행동력 차감 없음
- 스테이지 선택 화면에서 차감 체크 (UI 확인을 위해 활성화 시킨 이미지)

현재 구현된 시스템에서는 스테이지 클리어 성공 시에만 행동력이 차감된다.
- 스테이지 도전 시: 게임 플레이 시작
- 스테이지 클리어 성공 시: 행동력 차감
- 스테이지 클리어 실패 후
- 재도전: 추가 차감 없이, 그대로 진행
- 포기: 행동력 차감 없음 (환급 개념과 동일)

게임이 클리어되면서 Firebase에 변동사항을 저장시킨다.

다만 한 가지 문제가 있었다. 현재 경험치는 경험치 테이블을 기반으로 계산되지만, 저장된 데이터는 totalExp로만 관리되고 있었다.
그 결과, 로드 시 currentExp와 UI의 경험치 슬라이더가 갱신되지 않는 문제가 발생했다.
이를 해결하기 위해, 데이터를 로드할 때 totalExp를 기반으로 현재 레벨과 현재 경험치를 계산하도록 구현하였다.
이 방식으로, 저장된 데이터를 불러와도 경험치 슬라이더와 레벨 정보가 정상적으로 갱신되는것을 확인했다.

이후 개발 예정 내역
1. 인게임 UI 추가
- 플레이어 체력, 쉴드 UI 구현
- 로딩 UI 구현
-
예전에도 기능 구현 도중 중단된 프로젝트들이 있었지만, 이번에는 Firebase를 활용한 로그인과 데이터 연동 기능을 실제로 구현하는 데 성공했다.
이후 몇 가지 기능을 추가로 보완한 뒤, 이번 개발 일지를 마무리할 예정이다.
'Unity > 개발일지' 카테고리의 다른 글
| 개발 일지 - LoadingScene과 기능 추가, 인게임 플레이어 UI 추가(체력, 쉴드, FadeIn효과) (0) | 2025.12.02 |
|---|---|
| 개발일지 - 프로토타입 구현 기획 작성 및 구현 내역 (PrototypeStage, Chapter, FirebaseLogin, Save, Load) (0) | 2025.11.19 |
| 개발일지 - 프로토타입 구현 기획 작성 및 구현 내역 (0) | 2025.10.16 |
| 개발 일지 - Firebase 연동 테스트를 위한 간단한 게임 기획 (0) | 2025.10.07 |