언리얼 엔진 프로그래밍 기본 하나의 게임은 코드, 콘텐츠, 세팅이 전부 들어있는 게임 프로젝트로 정의 된다. 코드는 하나 이상의 게임플레이 모듈에 있고, 각 게임 프로젝트는 하나 이상의 모듈이 들어있다. 아트, 사운드 등의 콘텐츠는 에디터에 임포트되어 패키지와 맵으로 저장된다. 세팅은 시작시 로드되는 환경설정(ini) 파일에 정의된다. 모듈 각 게임은 하나 이상의 게임플레이 모듈로 이루어져 있다. 모듈은 별도의 패키지 파일이라기 보단 사실상 DLL에 가깝다. 모듈 API 모듈 밖에서 접근할 필요가 있는 함수와 클래스는 API 매크로를 통해 노출해야한다. 컴파일 시간 비용이 들기에 필요한 것만 노출해야한다. 클래스 게임플레이 클래스는 표준 C++ 헤더 파일과 엔진에 정의된 특수 매크로를 함께 사용한다. 클..
애셋 레지스트리 애셋 레지스트리(Asset Registry)는 에디터가 로드되면서 로드되지 않은 애셋 정보를 비동기적으로 모으는 에디터 기능이다. 콘텐츠 브라우저에서 사용하지만 에디터 코드의 어디에서나 사용 가능하다. 애셋 목록 구하기 애셋 레지스트리 모듈을 로드한다음 Module.Get().GetAssetsByClass()를 부르면 된다. FAssetData 의 목록을 반환 한다. FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); TArray AssetData; const UClass* Class = UStaticMesh::StaticClass(); AssetRegistryModul..
애셋 참조 강참조는 오브젝트 A가 오브젝트 B를 참조하여 A로드 시 B도 로드되게 한다. 약참조는 오브젝트 A가 오브젝트 B를 경로같은 문자열 형태로 참조하게 만드는 형태이다. 직접 프로퍼티 참조 애셋 참조의 가장 흔한 경우는 UPROPERTY 매크로를 통해 노출시키고 디자이너가 해당 애셋에 블루프린트나 월드 인스턴스를 통해서 지정한다. /** construction start sound stinger */ UPROPERTY(EditDefaultsOnly, Category=Building) USoundCue* ConstructionStartStinger; 생성 시간 참조 오브젝트 생성시 프로퍼티를 일부분으로 설정하는 방식이다. ConstructorHelpers 클래스를 사용하여 생성 단계 도중 오브젝트와..
코어 리디렉트 개발도중 클래스, 프로퍼티, 함수, 이름 등을 변경해야할 경우가 있을때, 코어 리디렉트(Core Redirect)를 사용하여 문제를 해결한다. DefaultEngine.ini 파일에 구성된다.(플러그인은 플러그인이름.ini파일) [CoreRedirects]섹션에 배치된다. 지원하는 코어 리디렉트 유형 ClassRedirects 폐기된 기존 UClass를 새 UClass를 가리키도록 변경 OldName = (필수)폐기된 UClass 이름 NewName = (필수)새 UClass 이름 MatchSubstring = (옵션)true인 경우 OldName이 부분문자열로 일치해도 동작 OverrideClassName = (옵션)true인 경우 이전 클래스의 기존 인스턴스는 새 클래스로 리매핑을 해야..
비동기 애셋 로딩 (Asynchronous Asset Loading) UE4에서 애셋 비동기 로딩을 쉽게 하기 위한 신규시스템이 도입되었다. 데이터 로드 및 참조에 사용되는 방법은 일반적으로 두가지가 있다. FSoftObectPath와 TSoftObjectPtr FSoftObjectPath는 애셋의 전체이름이 저장된 스트링이있는 구조체이다. 애셋의 참조 정보와 생성 메소드들을 포함한다. 에디터에서는 UObject처럼 표시된다. TSoftObjectPtr은 FsoftObjectPath를 감싸는 TWeakObjectPtr 이다. 에디터 UI에서 특정 클래스만 선택되게끔 제한하도록 하는 역할. 블루프린트에서 애셋의 SoftReference로 표시 애셋 레지스트리와 오브젝트 라이브러리 애셋 레지스트리는 애셋에 ..
Assert assert는 코드의 검증 도구이다. 언리얼 엔진에서는 검증을 위한 매크로 시리즈가 제공된다. 메크로를 확인하려면 아래의 파일에서 찾아볼 수 있다 /UE4/Engine/Source/Runtime/Core/Public/Misc/AssertionMacros.h 런타임 어서트 매크로는 다음과 같은 3가지 종류가 있다. 실행 중지 (DO_CHECK) 디버그 빌드에서 실행 중지 (DO_GUARD_SLOW) 실행 중지하지 않고 오류 보고 (DO_CHECK) check(표현식) 표현식의 결과가 false인 경우 실행을 중지한다. 가장 간단한 형태의 매크로 check(Mesh != nullptr) check(bInitialized); checkf(표현식, ...) check와 동일하지만 표현식의 결과가 f..
언리얼 엔진 TMap 언리얼 엔진(Unreal Engine)에서 TArray 다음으로 많이 사용되는 TMap일 것이다. 키와 값을 짝으로 데이터를 저장하는 방식 키로 값을 검색하여 값을 얻을수 있다. 만들고 채우기 Add 함수에 Key와 Value를 입력하여 컨테이너에 데이터를 추가한다. 중복된 키를 추가하면 기존의 같은 키에 있는 Value를 대체한다. Key만 넣게 되면 Value는 Value타입의 기본 생성자로 생성된다. TMap FruitMap; FruitMap.Add(5, TEXT("Banana")); FruitMap.Add(2, TEXT("Grapefruit")); FruitMap.Add(7, TEXT("Pineapple")); // FruitMap == [ // { Key: 5, Value:..
언리얼 엔진의 배열 TArray TArray는 문자그대로 배열 컨테이너이며, 언리얼 엔진(Unreal Engine)에서 가장 자주 쓰이는 컨테이너 클래스이다. 만들고 채우기 Init 함수로 배열을 같은 엘리먼트 사본으로 입력받은 갯수만큼 채운다 //배열의 선언 TArray IntArray; //Init 함수로 채우기 IntArray.Init(10, 5); //InitArray = [10,10,10,10,10] Add와 Emplace 함수로 배열 끝에 항목을 추가할 수 있다. Add는 객체를 복사하여 배열에 넣고 Emplace는 객체를 배열안에서 생성한다. 간단한 유형(int, float 등)은 Add를 사용해도 무방하지만 복잡한 구조체를 엘리먼트로 사용할때는 Emplace가 효율이 더 좋다. //배열 끝..
문자열 FString 언리얼 엔진(Unreal Engine)에는 FString, FName, FText의 문자열 클래스가 존재한다. 그 중 FString은 조작이 가능한 유일한 클래스이다. 변환 //FString 선언 FString TestString = FString(TEXT("My String")); //다른 문자열 클래스로 변환 //---------------------------------- //FString에서 FName으로 //FName은 대소문자를 구분하지 않기 때문에 손실될 위험이 있다 FName TestName = FName(*TestString); //FString에서 FText로 //FText의 자동 현지화(auto localization)의 혜택을 받지 못한다 FText TestTe..