테스트 과정에서 문제가 없다고 생각했었는데, 광고 가챠 쿨타임이 스택이 0인 상태에서는 스택이 쌓이지 않고 쿨타임이 마이너스로 표기되는 현상이 발견되었다.
이 부분의 문제는 논리 오류로 인해 발생했다.
public bool CanObtainAdGachaReward()
{
if (_dailyAdGachaRewardInfo.state <= 0) return false;
if (IsDailyAdGachaResetTime(out int stack))
{
_dailyAdGachaRewardInfo.state += stack;
if (_dailyAdGachaRewardInfo.state > 2) _dailyAdGachaRewardInfo.state = 2;
return true;
}
return true;
}
return false;
}
여기서 if (_dailyAdGachaRewardInfo.state <= 0) return false; 로 되어 있기 때문에, 스택이 0이 된 순간 계속 아이템을 얻을 수 없는 상태가 되며 스택이 업데이트가 되지 않는 문제가 발생한다. 따라서 아래와 같이 수정했다.
public bool CanObtainAdGachaReward()
{
if (_dailyAdGachaRewardInfo.state >= 1) return true;
if (IsDailyAdGachaResetTime(out int stack))
{
_dailyAdGachaRewardInfo.state += stack;
if (_dailyAdGachaRewardInfo.state > 2) _dailyAdGachaRewardInfo.state = 2;
return true;
}
return true;
}
return false;
}
에디터상에서는 발생하지 않는 문제지만, 빌드 후에 QA 팀에서 테스트를 진행할 때, 다음과 같은 문제가 발생했다.
이 문제는 에디터 상으로 디버깅할 수가 없다 보니, 빌드본으로 직접 테스트를 진행하여 디버깅을 해볼 수밖에 없었다.
해당 설정을 하고 태블릿으로 apk 파일을 받은 후, 태블릿을 컴퓨터에 USB로 연결한 다음 USB 디버깅을 킨다. 이 상태에서 게임을 설치하기 시작하면 유니티 에디터 상에서 로그가 찍히기 시작한다.
게임을 시작하고 진행해보면 이와 같이 로그를 확인할 수 있다.
버그가 발생하는 환경을 만들기 위해 튜토리얼을 끝내고 나서, 게임을 강제종료했다. 그 다음 다시 게임을 켜서 디버깅을 진행했는데, 문제가 발생했다.
프리즈 버그가 발생하는 것은 확인했는데, 프리즈 발생 시점에서 오류가 출력되지 않는 것이다.
당연히 뭔가가 심각한 크래시 같은 게 로그상으로 보일 거라고 생각했는데, 아예 오류가 발생하지 않는 상황에서 어떻게 대처해야 할지 난감했다.
그나마 현 상황에서 가장 가능성 높은 원인으로 꼽히는 건, 강제종료 시에 플레이어가 로그아웃 되지 않는다는 점을 발견했다.
유저가 정상적으로 게임을 종료하지 않아 로그아웃이 되지 않은 상태이며, 이 상태에서 파이어베이스로 다시 유저 데이터를 가져오는 과정에서 무언가 크래시가 발생했다고 추정하고 있다.
따라서 현 상황에서 할 수 있는 조치는 강제 종료에 대한 로그아웃 등의 기능을 넣을 필요가 있다.