태그 보관물: unreal

Unreal 5.4 AdMob 연동 시 빌드 되지 않는 문제 해결

개요

Unreal 5.4 버전이 공개되고 해당 엔진으로 개발을 진행하고 있었습니다. 어느 정도 개발이 진행되고 광고를 포함하려고 AdMob 을 연동했습니다. 그러나 빌드를 하면 오류가 발생하면서 파일이 생성되지 않는 문제가 있었습니다.

오류

오류의 내용은 다음과 같습니다.

로그의 일부

UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:699: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper
UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:724: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper
UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:790: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper
UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:811: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper
UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:831: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper
UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:873: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper

YourProject.Target.cs 파일에 ExtraModuleNames.Add(“AndroidAdvertising”); 가 활성화 되어 있는 것이 원인이었습니다. 5.3 버전에서는 문제 없이 빌드 되고 광고가 나타났는데 5.4 버전에서는 그렇지 않았습니다.

오류 해결 시도

문제를 없애고자 다음과 같이 조치해 보았는데 해결되지 않았습니다.

  1. Android Target 변경 latest 에서 android-33 으로 변경해도 동일(원래 34)
  2. 프로젝트의 버전을 5.3 으로 변경해서 빌드하려고 했으나 소스코드내의 버전 번호가 일치하지 않고 Map(Level) 파일의 버전이 맞지 않는다는 메시지가 나타남. Map(Level) 파일이 나타나지 않음.

해결방법(아마도 임시)

근본적인 해결책인지 확신 할 수 없지만 필자가 개발 중인 프로젝트에서는 배너 광고가 제대로 나타나고 게임도 제대로 동작했습니다. 엔진 버전은 5.4.1 입니다.

  1. Android Studio 로 YourProject\Intermediate\Android\arm64\gradle\ 프로젝트를 엽니다. 경로는 개발 환경에 따라 다를 수 있습니다.
  2. YourProject\Intermediate\Android\arm64\gradle\app\src\main\java\com\epicgames\unreal\GameActivity.java 파일을 엽니다.
  3. 오류가 발생하는 activityContext.runOnUiThread 이 부분을 this.runOnUiThread 로 변경해서 Android Studio에서 빌드합니다.

이렇게 하면 광고가 정상적으로 나타나는 것을 확인할 수 있습니다. 같은 문제를 겪고 계신분들께 도움이 되었으면 합니다.

근본적인 해결책이 무엇인지는 알 수 없으나 엔진이 빨리 패치 되어 문제가 해결되었으면 좋겠습니다.

근본적인 해결책

빌드 할 때 마다 GameActivity.java 파일을 수정하는 것이 너무 불편해서 조금 더 파악해 보았습니다. 그 결과 위 오류 로그에 나타나는 내용이 포함되어 있는 파일을 찾아냈습니다.

C:\YourPath\Epic Games\UE_5.4\Engine\Source\Runtime\Advertising\Android\AndroidAdvertising\AndroidAdvertising_APL.xml 파일을 열어보면 오류가 발생한 내용과 같은 행이 있는 것을 알 수 있습니다.

Unreal 을 종료한 후 작업합니다. AndroidAdvertising_APL.xml 파일을 백업 하신 후 내용 중activityContext.runOnUiThread(new Runnable() 를 this.runOnUiThread(new Runnable() 로 변경하고 다시 시작한 후 Unreal에서 Package Project 를 수행하면 오류 없이 apk 파일이 생성됩니다.

야광봉 2

개요

기존에 만들었던 야광봉 앱은 막대모양으로 되어 있어 좀 단순했습니다. 그리고 색상도 정해진 것만 선택할 수 있는 단점이 있었습니다. 야광봉의 모양과 색상을 선택할 수 있도록 하면 좋겠다는 생각이 들어 제작하게 되었습니다.

개발도구

야광봉 2 는 Unreal 로 개발 했습니다. Unity 와 비슷한 점도 있었지만 생각보다 시간이 많이 소요되었습니다. 하지만 Unreal 에 많이 익숙해 질 수 있는 기회였습니다.

과정

휴대전화에 표시될 야광봉의 모양을 먼저 정했습니다. 기본 막대모양, 도형, 여러가지 모양을 추가하기로 하고 간단하게 3D 모델링을 진행했습니다.

설정 화면에서 모양과 색상을 변경하면 미리보기 기능이 있어야 사용자 입장에서 편리할 것 같아 많은 시간을 투자했습니다. UMG 로 설정 화면을 디자인하는 것은 어렵지 않았습니다. 그런데 Mesh 를 미리보기 하는 기능을 넣는 것은 생각보다 쉽지 않았습니다.

UMG에서 Mesh 미리보기

핵심은 SceneCaptureComponent2D 였습니다. Mesh를 캡쳐해서 이미지 형태로 보여주는 방식으로 미리보기를 구현했습니다.

야광봉 2 설정 화면

부가 기능

밝기와 크기도 조절할 수 있도록 해서 다양한 모양, 색상, 크기를 지원하도록 했습니다. 그리고 설정된 사항을 즐겨찾기로 저장해서 쉽게 원하는 형태를 선택할 수 있도록 했습니다. 이전 앱과 같이 잠금 버튼을 추가해서 의도하지 않은 터치가 발생하지 않도록 했습니다.

눈 결정모양

여기에서 앱 정보를 확인하실 수 있습니다. 유료 앱 입니다.