태그 보관물: unreal

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="새클래스명")

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

교훈

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

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

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 설정