오늘은 계획했던 새로운 개발 대신, 예상치 못한 버그들과 씨름하는 하루를 보냈네요. 그래도 몇 가지 중요한 문제들을 해결할 수 있었습니다.
이미지 저장 버그 해결기
첫 번째로 마주친 문제는 이미지 저장 관련 버그였습니다.
이미지를 저장하고 불러오는 과정에서 문제가 발생했는데요, 로그를 확인해보니 소스 이미지 이름 뒤에 '_0'이라는 문자가 자동으로 붙고 있었습니다.

사진 설명을 입력하세요.
알고 보니 이는 유니티가 이미지를 교체할 때 자동으로 클론을 생성하면서 발생하는 현상이더군요. 해결 방법으로는 두 가지를 고려했습니다:
1. 이미지 교체 대신 삭제 후 새로 생성하기
2. 불러올 때 '_0' 문자열 제거하기
// 저장된 배경 설정
if (!string.IsNullOrEmpty(GameManager.Instance.savedProgressData.currentBackground))
{
AssignBgImage(GameManager.Instance.savedProgressData.currentBackground.Replace("_0", ""));
}
결국 두 번째 방법을 선택해 이미지를 불러올 때 '_0'을 제거하는 것으로 해결했습니다.
튜토리얼 버그와의 싸움
두 번째는 튜토리얼 관련 버그였습니다. 다이얼로그씬 → 튜토리얼씬 → 다이얼로그씬으로 이어지는 과정에서 'isTuto' 변수를 사용해 다이얼로그 재생 번호를 제어하고 있었는데요.
EpisodeData tutorialEpisode = EpisodeManager.Instance.GetEpisodeById(tutorialId);
if (tutorialEpisode != null && tutorialEpisode.isPlay)
{
StartNextFunc();
}
문제는 이 변수가 게임 저장 시 함께 저장되지 않아, 게임을 불러올 때마다 false로 초기화되면서 튜토리얼이 반복되는 현상이 발생했습니다. EpisodeManager를 통한 데이터 관리로 전환하여 이 문제를 해결할 수 있었죠.
캐릭터 이미지 크기 개선
캐릭터들의 신장 차이를 표현하기 위한 작업도 진행했습니다. 기존에는 모든 캐릭터의 이미지 크기가 동일했는데요, 이는 실제 캐릭터들의 키 차이를 전혀 반영하지 못하는 문제가 있었습니다.

사진 설명을 입력하세요.
이를 해결하기 위해 캐릭터별로 크기를 다르게 설정할 수 있는 변수를 추가했습니다. 이제 캐릭터들의 실제 키 차이가 게임에서도 자연스럽게 표현됩니다.
if (characterSprite != null)
{
// characterContainer 내의 모든 CharacterImage 컴포넌트를 검색
CharacterImage[] allCharacterImages = characterContainer.GetComponentsInChildren<CharacterImage>();
CharacterImage targetCharacterImage = allCharacterImages.FirstOrDefault(img => img.characterName == characterName);
// 캐릭터의 크기 가져오기 (없으면 기본값 1f 사용)
float characterScale = characterScaleDict.TryGetValue(characterName, out float scale) ? scale : 1f;
BGM 전환 개선
버그 수정 외에도 작은 개선점을 하나 추가했습니다. BGM이 갑자기 끊기듯 바뀌는 것이 거슬려서, FadeIn/FadeOut 효과를 적용했네요. fade 시간을 2초로 설정하여 자연스러운 BGM 전환이 가능해졌습니다.
public void PlayBGM(string name, bool loop = true, float fadeTime = -1)
{
float crossFadeTime = fadeTime < 0 ? DEFAULT_CROSSFADE_DURATION : fadeTime;
AudioClip newClip = GetClip("bgm", name);
예상치 못한 버그들과 씨름하느라 계획했던 개발은 못했지만, 게임의 완성도를 높이는 중요한 수정들을 할 수 있었던 하루였네요.