개인개발기록/게임개발프로젝트

2025_05_05_플랫포머_게임개발_연습_프로젝트

pop2bubbledev 2025. 5. 6. 03:32

[SaveManager 게임 정보저장]

작업 일자: 2025_05_05
주요 작업: SaveManager 기반완성
진행도: 100%


1. 작업 요약

  • SaveManager의 저장해야할 데이터를 명확히하고 그데이터를 저장 및 삭제기능 추가
  • 목표 작업 : SaveManager의 완성
  • 진행 작업 : SaveManager의 완성 목표달성 완료

2. 상세 작업 내역

항목내용
추가 메서드/클래스 DeleteData,DeleteGame,Refresh,UnlockNextStage
수정 사항 StageProgressData,GetStageState
삭제/리팩토링 SlotPopup,OnStageClear

2-1. 주요 코드 요약

(1) 데이터삭제

  • 해당하는 Slot의 Data를 삭제한다
public void DeleteData(int index)
{
    slots[index] = null;
    File.Delete(GetFilePath(index));
}
 

Delete 버튼을 누를시 2차확인 과 번호 지정을하게 설정

2차확인창

2차 확인시 UIRefresh 추가소요예상으로 우선 하드코딩

나중에 좋은 방안이 생각날경우 리팩토링 예정


(2) StageData 로직 간소화

  • 게임시작시 모든 Stage에 기본값을 넣어주고 Stage1_1 을 Opened 상태로 초기화
public class StageProgressData
{
    public Dictionary<Stage, StageData> stages;

    public StageProgressData()
    {   //초기값을 넣기위해 다음과같이 선언
        stages = new Dictionary<Stage, StageData>();

        foreach (Stage stage in Enum.GetValues(typeof(Stage)))
        {
            stages[stage] = new StageData
            {
                isCleared = false,
                clearTime = float.MaxValue,
                stageState = StageState.Locked
            };
        }

        stages[Stage.Stage1_1].stageState = StageState.Opened;
    }
}

 

 

이전 Stage의 클리어시 다음 Stage 클리어로 상태변경

            if (nextData.stageState == StageState.Locked)                     //상태 Open으로 변환
                nextData.stageState = StageState.Opened;

3. 작업 중 변경사항

  • SlotPopup,OnStageCleared 메서드 간략화
  • StageProgressData 기존 데이터를 Dictionary 형태로 저장하기위해 선언만 해두었던 클래스 구현
  • GetStageState StageSelectManager에서만 임시판단하던 메서드를 Stage의 상태로 변경

4. 소요 시간

항목시간
예상 소요 시간 6시간
실제 소요 시간 5시간

5. 작업 중 애로사항

  • StageData가 시작시 로드되어있지않아 정보를 가져옴에 불편을 느꼈고 수정과정에서 게임시작시 미리 초기값을 넣어 저장하는 형태로 불러오게됨으로써 해결했다
  • 인스펙터창에서 Slot의 Data번호와 삭제하는 Data의 정보가 일치하지않아 무조건 0 슬롯이 삭제되었다
    slot을 SetSlot 메서드로 설정하게하여 해결
  • 위와 비슷한문제로 각 세이브슬롯의 데이터를 새로고침하지못하여 삭제하여도 같은정보가 띄워졌으나 약간의 하드코딩을 더해 해결하였다

6. 예상되는 문제점

  • (앞으로 생길 위험요소)
  • (미구현된 기능이 동작할 때 생길 이슈 등)

7. 다음 작업 계획 (선택)

  • (다음에 해야 할 작업을 간단히 메모)

8. 추가 메모 (선택)

현재는 Meta의 Enum 값만 받아와 그걸 변형시켜 넘겨주고있지만 받은 Enum값을기반으로 스테이지의 데이터를 전부 따로 저장해주어야한다 아마도 데이터가 하나로 통일된다거나 맞는 위치에 무조건 저장할수있다는 보장이없어 힘들것같다 
※Meta와는 별개로 정보를 관리하면서 Meta에는 스테이지에 해당하는 데이터를 알아서 설정만 해주면 된다