카테고리 보관물: Unreal

Unreal 5.6 안드로이드 배포판 터치되지 않는 문제 해결

개요

이전 버전으로 개발된 프로젝트를 5.6 으로 변경해서 안드로이드용 패키지 파일을 빌드해서 실 기기에서 테스트 한 적이 있었습니다. 이상하게도 전혀 터치가 되지 않아 게임 진행이 불가능 했습니다. 도저히 해결할 수 없어서 다시 원래의 버전으로 되돌렸습니다.

현상

에디터에서는 문제 없이 동작하는데 안드로이드용 패키지로 빌드해서 설치하면 발생하는 문제였습니다. 터치가 전혀 일어나는 것은 아니었습니다. 로그를 추가해서 확인해보니 터치 이벤트는 발생하는데 게임내에서 의도한 동작은 전혀 반응이 없었습니다.

해결

다른 문제에 관한 자료를 검색하다가 우연히 해결 방법을 찾았습니다. 결론은 Project Settings > Platforms > Android > Input > Allow Bluetooth controllers 항목을 체크하면 제대로 화면 터치가 동작하여 정상적으로 게임이 동작하게 됩니다. 필자의 경우 5.6.1 버전이었습니다.

Allow Bluetooth controllers 항목 체크
Allow Bluetooth controllers 항목 체크

Allow Bluetooth controllers 항목이 언제부터 있었는지 확인하지는 못했습니다. 화면 터치가 되지 않는 부분과 관계가 없어 보이는데 이 항목을 체크하고 다시 빌드/배포하면 정상적으로 동작하는 것을 확인할 수 있었습니다.

테스트 할 때는 잘 되는데 Google Play 에 올렸을 때 문제가 있다는 글도 있었는데 필자의 경우에는 그런 문제가 발생하지는 않았습니다.

혹시 모르니 실 기기에서 테스트 시 문제가 없는 것을 확인하신 후 Google Play 에 올리신 것을 받으셔서 다시 확인해 보시기 바랍니다.

필자와 같은 문제를 겪으신 분들에게 도움이 되었으면 좋겠습니다.

Unreal Engine 클래스 이름 변경되었을 때 조치 법

개요

작업한 프로젝트의 안드로이드 Target SDK 변경을 위해 엔진 버전을 업데이트 했습니다. 그 다음 프로젝트를 열었더니 같은 이름의 헤더는 허용하지 않는다는 메시지가 나타났습니다. 엔진이 업데이트 되면서 불행하게도 프로젝트에서 사용한 헤더 이름과 동일한 파일이 추가된 것 같았습니다. 이 문제를 해결하는 방법을 알아보겠습니다.

메시지

정확한 메시지는 다음과 같습니다. ‘Two headers with the same name is not allowed.’ 프로젝트에서 해당하는 파일의 정보를 보여주므로 클래스 이름과 파일명을 변경하면 됩니다. 엔진 소스를 변경할 수는 없으니 어쩔 수 없이 바꾸어 주어야 합니다.

블루 프린트 수정

소스 레벨에서 클래스 명을 변경하고 엔진 에디터에서 프로젝트를 다시 열면 CreateExport: Failed to load Outer for resource… 이런 형식의 메시지가 나타납니다. 원래 참조했던 클래스의 이름이 변경되어 정확히 참조하지 못해서 발생하는 오류입니다.

이름이 변경된 클래스를 참조하는 블루 프린트는 다시 생성해 주면 되는데 작업이 많이 진행되었거나 완료된 경우 이렇게 하기가 현실적으로 어렵습니다.

블루 프린트를 오픈 합니다. File > Reparent Blueprint 메뉴를 선택합니다.

File > Reparent Blueprint 메뉴 선택

대화 상자가 나타나면 변경된 클래스 이름을 검색해서 변경하면 됩니다.

Reparent blueprint 대화상자

변경된 클래스가 검색되지 않는 경우

필자의 경우 이름이 변경된 클래스가 검색되지 않아 다음과 같은 방식으로 변경했습니다.

yourproject\Config\DefaultEngine.ini 파일을 열어 다음과 같은 내용을 추가합니다. 필자의 경우 CoreRedirects 섹션이 없어서 만들었습니다.

[CoreRedirects]
+ClassRedirects=(OldName="이전클래스명",NewName="새클래스명")

엔진을 종료하고 다시 시작하면 원래 나타났던 경고 메시지는 나타나지 않습니다.

교훈

클래스 명을 정할 때 가능하면 일반적인 이름보다는 프로젝트의 성격에 맞는 구체적인 형태로 만드는 것이 중요하다는 것을 깨달았습니다.

나중에 엔진이 업데이트 되면서 추가되는 기능의 클래스 이름이 중복될 확률이 없도록 해야 혹시 모를 추가 작업을 방지할 수 있습니다.