[2025_10_23]다양한 미니게임이 있는 메타버스만들기(GameManager캐싱해서 쓰다가 발생한 오류 및 저장 데이터 Struct로 구조변경->메모리 효율성)

2025. 10. 23. 20:46TIL

오늘 한 일

  • 저장 / 불러오기 기능 구현
  • 대화 후 미니게임 입장 로직 구현

구현 내용

  • 플레이어 정보와 각 미니게임의 최고 점수를 저장하고 불러오는 기능을 구현함.
  • 플레이어 정보는 현재 기본 구조만 구성했으며, 추후 꾸미기 및 아이템 시스템이 추가되면 함께 확장 예정.

문제 상황

  • GameManager 인스턴스 접근 시 초기화 시점 문제 발생.
  • 클래스 최상단에서 GameManager gameManager = GameManager.Instance; 
    선언하였는데 제대로 GameMangaer객체가 들어오지 않는 상황 발생

해결 방법

  • GameManager.Instance 호출을 필드 선언 시점이 아닌, 필요한 곳에서 GameManager.Instance.~로 호출하도록 변경.
  • 다른 변수들도 클래스 최상단에서 직접 초기화하지 않고, Init() 메서드로 분리 후
    Start()에서 호출하여 초기화 시점 명확히 함.

튜터님 피드백

저장용 데이터 구조는 struct 사용 권장

  • class 대신 struct를 사용하면 Heap 영역 할당을 줄여 최적화에 유리.
  • 예시:
    [Serializable] public struct PlayerData { public string playerName; public int gold; public int selectedCharacterID; }
  • 이후 모든 데이터 저장 구조체(class) 를 struct로 변경하여 메모리 효율성 개선.

오늘의 배움

  • struct를 활용한 데이터 관리가 경량화 및 최적화에 도움이 됨을 학습.
  • 코드 구조를 깔끔하게 유지하려면 초기화 로직을 별도 메서드(Init)로 분리하는 것이 유지보수에 유리함.
  • 쓸거면... 제대로 알고 쓰자... 지금은 간단한 코딩스타일 문제여서 아 그렇구나 하고 넘길 수 있었지만... 크리티컬한 에러라면 끔찍하다.