언리얼 C++ 프로그래밍 75

[언리얼 C++] Asset 레지스트리

Asset 레지스트리는 에디터가 로드되면서 로드되지 않은 Asset에 대한 정보를 비동기적으로 모으는 에디터 서브시스템입니다. 이 정보는 에디터가 Asset을 로드하지 않고 목록을 만들 수 있도록 메모리에 저장됩니다. 이 정보는 메모리의 Asset이나 디스크의 파일이 변경되면 최신으로 자동 유지됩니다. 1. Asset 목록 구하기 클래스별 Asset 목록을 만들려면, Asset 레지스트리 모듈을 로드한 다음 Module.Get().GetAssetsByClass() 함수를 부르기만 하면 됩니다. FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); TArray AssetData; const..

[언리얼 C++] Asset 레퍼런스

언리얼 엔진 4에서 Asset 레퍼런스는 두 가지 방식으로 생각해 볼 수 있습니다. 하나는 오브젝트 A가 오브젝트 B를 참조하여 오브젝트 A 로드시 오브젝트 B도 함께 로드되도록 만드는 강참조이고, 다른 하나는 오브젝트 경로가 같은 문자열 형태의 간접 메커니즘을 통해 오브젝트 A가 오브젝트 B를 참조하게 만드는 약참조입니다. 1. 직접 프로퍼티 참조(강참조) Asset 레퍼런스의 가장 흔한 경우로 UPROPERTY 매크로를 통해 노출됩니다. C++ 클래스에서 UPROPERTY로 지정한 변수를 선언하고, 해당 클래스를 상속 받는 블루프린트를 생성하면 블루프린트에서 UPROPERTY로 지정한 변수를 참조할 수 있습니다. UPROPERTY(EditAnywhere, Category=Mesh) UStaticMes..

[언리얼 C++] 클래스, 열거형, 프로퍼티, 함수 명 변경하는 방법 - 코어 리디렉트

개발 도중 기존 클래스, 열거형, 프로퍼티, 함수 명을 변경해야 할 경우가 있습니다. 이 변경에 영향받는 애셋 수가 많으면 이름 변경 후 프로젝트를 리컴파일해도 언리얼 엔진이 더이상 기존 애셋을 인식하지 못해 엄청난 데이터 손실이 발생합니다. 이 문제를 해결하기 위해 언리얼 엔진에서는 코어 리디렉트를 사용합니다. 코어 리디렉트는 프로젝의 DefaultEngine.ini, 플러그인의 경우 그 플러그인 접두사 이름의 .ini에 구성해야 합니다. 어느 경우든, 코어 리디렉트는 "[CoreRedirects]" 섹션에 배치됩니다. 이 코어 리디렉트는 애셋을 로드하는 동안 폐기된 데이터를 자동 리매핑하여 이름 변경 프로세스로 인한 데이터 손실을 방지합니다. 현재 사용되는 코어 리디렉트 실제 예는, BaseEngin..

[언리얼 C++] 비동기 애셋 로딩

UE4에서 비동기 애셋 로딩이란 실행시간에 애셋을 로드/언로드하는 메서드를 의미합니다. 비동기 애셋 로딩은 개발 도중이나 디바이스상에서 쿠킹된 데이터로 실행할 때나 동일하게 작동하므로, 필요에 따라 데이터를 로딩하기 위한 별도의 코드 패스를 유지할 필요가 없습니다. 이렇게 필요에 따라 데이터를 로드 및 참조에 사용되는 방법은 일반적으로 두가지가 있습니다. 1. FSoftObjectPath와 TSoftObjectPtr FSoftObjectPath는 애셋의 전체 이름으로 된 스트링이 들어있는 단순한 구조체입니다. 클래스에 이 유형의 프로퍼티를 만들면, 에디터에는 마치 UObject* 프로퍼티인 양 나타납니다. 쿠킹과 리디렉터도 제대로 처리되므로, FSoftObjectPath가 있다면 디바이스에서의 정상 작동..

[언리얼 C++] Assert 매크로

Assert란 주어진 코드 조각이 가정하는 상황을 검증하는 도구입니다. UE4에선 다양한 유형의 검증을 제공하기 위해 매크로 시리즈를 제공합니다. 런타임 Assert 매크로는 실행 중지, 디버그 빌드에서 실행 중지, 실행 중지하지 않고 오류 보고 이렇게 총 3가지 카테고리에 들어갑니다. 실행 중지와 실행 중지하지 않고 오류 보고 유형은 DO_CHECK 디파인에 따라 컴파일되며, 디버그 빌드에서 실행 중지 유형은 DO_GUARD_SLOW 디파인을 사용하여 컴파일됩니다. 해당 디파인 중 어느 하나가 0으로 설정되면 매크로는 비활성화되어 실행에 영향을 끼치지 않습니다. 1. check(표현식) 이 매크로는 표현식을 실행한 뒤, Assert 결과가 false이면 실행을 중지시킵니다. 표현식은 매크로가 빌드에 컴..