카테고리 보관물: Unreal

Unreal 안드로이드 배포판 패키지 이름 등록

개요

구글 플레이에 앱을 올릴 때 제한이 없던 이전과 달리 패키지 이름을 먼저 등록해야 합니다. 기존 앱들은 자동으로 추가되었지만 신규 앱은 따로 등록해야 합니다. Unreal 에서 안드로이드 배포판을 등록할 때 패키지 이름을 등록하는 과정을 알아보겠습니다.

패키지 이름 결정 및 Unreal 에서 APK 파일 생성

먼저 패키지 이름을 결정합니다. com.yourcompany.yourapp 을 예로 진행해 보도록 하겠습니다. jks 파일을 Android Studio 를 이용하거나 다른 방법으로 생성합니다. Unreal 에서 다음과 같이 설정 합니다.

Project Settings > Packaging > Project

Build Configuration > Shipping, For Distribution 항목 선택

Project Settings > Packaging > Project 항목 설정
Project Settings > Packaging > Project 항목 설정

Project Settings > Platforms > Android

Package game data inside .apk? 항목을 선택해야 APK 파일이 생성됩니다.

Project Settings > Platforms > Android 항목 설정
Project Settings > Platforms > Android 항목 설정

Key Store 항목에 생성한 jks 파일명을 지정하고 비밀번호를 입력합니다.

위와 같이 설정 후 APK파일을 생성합니다. 반드시 배포용으로 생성해야 합니다. 그렇지 않으면 SHA-256 digest 키가 일치하지 않아 패키지 이름 등록이 불가능 합니다.

키 정보 확인

생성된 APK파일을 대상으로 다음과 같이 명령어를 입력하면 키 정보를 확인할 수 있습니다.

apksigner verify –print-certs yourapp.apk

키 정보
키 정보

SHA-256 digest 키 정보를 복사해 놓습니다.

Android 개발자 인증에 등록

이제 구글 플레이 개발자 콘솔에 접속해서 Android 개발자 인증 버튼을 클릭합니다. 패키지 이름 등록 버튼을 클릭하면 다음과 같이 나타납니다.

패키지 이름 등록
패키지 이름 등록

여기에 패키지 이름을 입력합니다(ex:com.yourcompany.yourapp)

임시 상태로 등록 되는데 링크를 클릭해 보면 다음과 같이 키 추가 화면이 나타납니다.

키 추가 화면
키 추가 화면

키 추가 버튼을 클릭하면 다음 화면이 나타납니다. 이전에 복사해 두었던 SHA-256 digest 항목을 그대로 입력합니다.

SHA-256 digest 키 추가
SHA-256 digest 키 추가

키를 추가하면 다음과 같은 화면이 나타납니다.

등록된 지문 정보
등록된 지문 정보

우측의 확인 링크를 클릭하면 APK 파일을 안내와 같이 생성해서 올리라고 나타납니다.

APK 서명 및 업로드 안내 화면
APK 서명 및 업로드 안내 화면

패키지 이름 확인 용 APK 파일 생성

Android Studio 를 실행해서 아무 것도 없는 프로젝트를 생성합니다. Unreal에서 지정한 패키지 이름과 동일하게 생성해야 합니다. 패키지 이름이 동일하게 생성되었다면 app/src/main/assets/adi-registration.properties 파일을 생성하고 1 번에서 노출된 코드를 그대로 입력합니다. /assets/adi-registration.properties 경로는 임의로 변경하면 안됩니다. 경로가 잘못된 경우 APK 파일을 업로드 하면 The uploaded APK does not have the required token file. 오류가 발생합니다.

SHA-256 digest 키 정보가 일치하지 않으면 APK 파일을 업로드 하면 The uploaded APK has a different signature. 오류가 발생합니다.

문제가 없는 경우 하단의 제출 버튼이 활성화 되고 클릭하면 완료 됩니다. 잠시 기다리면 등록이 된 것을 확인할 수 있습니다.

패키지 이름이 등록된 것을 확인한 후 구글 플레이 콘솔에 앱 등록을 진행하면 됩니다.

Unreal 동적으로 생성된 액터의 스프라이트 overlap 이벤트가 발생하지 않는 문제 해결

개요

타일맵과 마찬가지로 각종 액터를 코드를 통해 동적으로 생성했습니다. 정상적으로 나타나는데 의도한 동작을 하지 않았습니다. 수동으로 추가한 같은 종류의 액터는 정상적으로 동작했습니다. 이전과 같이 뭔가 생성 타이밍의 문제가 아닐까 생각되었습니다.

문제 확인

해당 액터는 하나의 스프라이트가 추가 되어 있었습니다. 플레이어가 스프라이트와 겹치면 의도한 동작을 하도록 작업되어 있습니다. 동적으로 생성된 액터는 overlap 이벤트가 전혀 발생하지 않았습니다. 수동으로 배치한 액터에서는 로그가 정상적으로 출력되어 문제가 없었습니다.

액터에 추가된 스프라이트
액터에 추가된 스프라이트

해결

타일맵에서 Navigation Paths 가 동작하지 않는 문제와 비슷했습니다. 해당 액터의 BeginPlay 메소드에서 다음과 같이 시간 지연 후 등록해 주면 정상적으로 동작합니다.

FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, FTimerDelegate::CreateLambda([&]() {
    GetWorld()->GetTimerManager().ClearTimer(TimerHandle);

    YourSpriteComponent = GetComponentByClass<UPaperSpriteComponent>();

    if (YourSpriteComponent != nullptr) {
        YourSpriteComponent->OnComponentBeginOverlap.AddDynamic(this, &AYourClass::OnBeginOverlap);
    }
}), 0.2f, false);

이 액터와 같은 형식의 다른 액터들도 동적으로 생성했을 경우 같은 문제가 있었습니다. 다른 액터들도 위의 코드를 추가해서 정상적으로 동작하도록 했습니다.

이 문제도 결과적으로 보면 간단한데 정확하게 문제를 식별하고 적절한 처리를 추가하는데 생각보다 시간이 많이 소요되었습니다. 필자와 같은 문제를 겪으신 분들께 도움이 되었으면 합니다.