콘텐츠로 이동

Unity 2021.3에서 2022.3으로 업그레이드하며 겪은 문제들

모바일 슬롯 게임의 Unity 버전을 2021.3.39f1에서 2022.3.33f1로 올렸다. 엔진 변경에 따라 코드와 SDK를 맞추고, 업그레이드 후 나온 문제를 하나씩 해결했다.

  • 에셋 임포트 규칙 패키지의 preloadAudio 필드가 obsolete되어, 코드를 바꿔 default, Android, iOS, WebGL, Standalone 플랫폼에 각각 적용했다.
  • EditorUserBuildSettings.il2CppCodeGeneration이 deprecated되어 PlayerSettings.SetIl2CppCodeGeneration으로 바꿨다.
  • SpriteAtlas에 packedSpriteRenderDataKeys 필드가 추가되어 초기값을 생성해 반영했다.
  • 프리팹 데이터의 m_RootOrder: 0은 deprecated되었다.
  • AppLovin: SDK에서 크래시가 나서 최신 버전(v7.3.1, 패키지 기준 12.4.3.0 → 12.5.0.1)으로 올렸다.
  • OneSignal과 com.unity.mobile.notifications: 두 패키지가 충돌한다. OneSignal 업데이트는 공수가 커서 com.unity.mobile.notifications를 2.3.2에서 2.1.1로 다운그레이드해 크래시를 피했다.
  • UniWebView: 크래시가 나서 버전 5로 올렸다. 이에 의존하는 사내 공통 베이스 모듈과, 그 모듈에 의존하는 Google 모듈(SNS 로그인)도 함께 업데이트했다.
  • IAP: Android 결제 응답 메시지 형식이 바뀌어 SDK가 파싱에 실패하면서 결제가 실패했다. 이 앱에서는 재현되지 않았지만 같은 SDK를 쓰는 다른 앱에서 발생해, IAP를 같은 버전(4.12.2)으로 맞췄다.
  • 특정 iOS 기기에서 가로-세로 회전 시 앱이 멈추던 문제를 피하려고 넣어 두었던 빌드 후처리(PostProcessIOSBuild)를 제거했다.

Canvas의 overrideSorting = true만으로 튜토리얼 배경 위에 그려지던 UI가 있었다. Unity 2022부터는 sortingOrder를 명시하지 않으면 렌더링 순서가 보장되지 않는다. 스크립트에서 sortingOrder를 직접 제어해 해결했다.

로컬 빌드 머신에서 정상적으로 임포트되지 않은 SpriteAtlas가 있었다. 원인은 확인하지 못했다. 리임포트해 해결했다.

인터스티셜 광고를 본 뒤 Graphics device is null. TMPro.TextMeshProUGUI:Awake() 로그와 함께 앱이 크래시했다.

  • 로비 포스터의 SkeletonGraphic이 재생되지 않았다. 작업자가 입력한 startingAnimation 값의 오타가 원인인 기존 문제였다.
  • DEBUG 빌드에만 있는 치트용 콜라이더 때문에 인게임 콜라이더가 동작하지 않는 경우가 있어 수정했다.
  • 특정 슬롯 머신의 1x1 포스터 Spine 리소스가 없어 런타임 크래시가 났다.