글쓴이 보관물: Toughman

Unreal Engine 특정 액터 충돌 무시하는 방법

개요

개발 중인 게임에 주기적으로 투사체를 플레이어에게 발사하는 적 캐릭터를 추가 했습니다. 적 자체와 플레이어의 충돌을 감지하기 위해 Capsule Component 가 포함되어 있었습니다. 여기에 투사체를 발사하도록 공격 방법을 추가했는데 둘 간의 간섭이 발생했습니다.

문제

적이 플레이어를 감지해서 투사체를 발사하기 전까지는 문제가 없었습니다. 투사체에 플레이어가 맞았을 경우의 처리를 위해 로직을 변경하다 보니 발생한 문제 였습니다. Collision Presets 관련한 부분을 조정해서 원하는 이벤트가 발생하도록 했습니다. 이렇게 하니 적과 적이 스스로 생성한 투사체가 서로 충돌하는 현상이 있었습니다. 이런 유형의 문제를 해결하는 방법을 알아보도록 하겠습니다.

Object Channels 항목 추가

Project Settings > Engine > Collision 선택해서 다음과 같이 Object Channels 항목을 추가합니다(EnemyProjectile).

Object Channels 항목 추가

Object Type 변경

다음과 같이 투사체 블루프린트의 Collision Presets 는 Custom, Object Type은 EnemyProjectile 로 설정합니다.

Object Type 설정

적 블루프린트에서 EnemyProjectile 무시 하도록 설정

투사체를 생성하는 적 블루프린트의 Collision Presets 는 Custom, Collision Responses > EnemyProjectile 항목은 Ignore 로 선택하면 됩니다. 이렇게 하면 투사체를 생성한 적과 투사체가 서로 충돌하지 않게 됩니다.

추가된 EnemyProjectile Ignore 설정

유니티(Unity)와 애드몹 앱 오픈 광고 연동 오류 해결

개요

유니티로 만든 앱에 연동한 전면 광고가 “예기치 않은 전면 광고 실행” 이라는 내용으로 중지가 되었습니다. 사용자와 상호작용을 하는 앱은 아니었습니다. 그러나 상황에 따라 사용자가 의도하지 않게 광고를 터치할 수 있는 가능성이 있었습니다. 앱 오픈 광고로 유형을 변경하는 것이 좋을 것 같아 작업을 진행했습니다.

문제발생

앱 오픈 광고를 예제를 참고해서 구현하고 에디터에서 광고가 나타나는 것은 확인했습니다. 실 기기에 올려서 확인해 보니 광고가 나타나지 않았습니다. 로그캣으로 확인해 보니 다음과 같은 오류가 기록되었습니다.

AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/DefaultLifecycleObserver;
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/DefaultLifecycleObserver;

androidx.lifecycle:lifecycle-process 라이브러리를 참조하지 못하여 발생하는 문제로 추측되었습니다. 여러 가지 방법을 적용해 보았으나 해결 되지 않았습니다.

문제해결

에디터의 버전을 유지하면서 여러가지 방법을 적용해 보았는데 실패했습니다. 에디터 버전을 변경하면 없던 오류가 발생하는 경우가 많이 있습니다. 최대한 피하려고 했는데 해결이 되지 않아 2021.3.9f1 에서 2021.3.37f1 로 변경해서 프로젝트를 다시 열었습니다.

그 다음 Project Settings > Player > Build > Custom Main Gradle Template 체크, Project Settings > Player > Build > Custom Gradle Properties Template 체크 하면 각각 파일의 위치가 나타납니다. \Assets\Plugins\Android\mainTemplate.gradle 파일에 implementation ‘androidx.lifecycle:lifecycle-process:2.6.2’ 를 추가했습니다.

\Assets\Plugins\Android\gradleTemplate.properties 파일에는 android.useAndroidX=true 내용이 있는지 확인합니다.

이렇게 해서 빌드 후 실 기기에 올려보면 앱 오픈 광고가 나타나는 것을 확인할 수 있습니다.

정리해 보니 간단해 보이는데 수 많은 시행착오가 있었습니다. 뭔가 잘 풀리지 않으면 에디터의 버전을 변경한 후 진행해 보는 것도 해결 방법 중 하나 인 것 같습니다.