본문 바로가기
반응형

Unreal176

Unreal C++ 편리한 매크로 함수 위치(__FUNCTION__ ), 호출된 라인(__LINE__ ) [Unreal/C++] 편리한 매크로 함수 위치(__FUNCTION__ ), 호출된 라인(__LINE__ ) __FUNCTION__ : 현재 호출된 함수이름을 나타내는 매크로 __LINE__ : 현재 호출된 해당 라인을 나타내는 매크로 __FILE__ : 파일의 경로를 나타내는 매크로 코딩을 하다보면 클래스와 수많은 코드들을 마주하게 된다.이때 함수의 위치나 호출된 라인이 궁금할 때가 있다.특별한 경우에 찾아야 하거나 에러가 의심될 때 사용하면 편리하다. CLog::Log(__FUNCTION__, __LINE__);위와 같이 구현해두면 편리함을 느낄 수 있다.클래스명과 호출된 함수, 그리고 호출된 라인까지 출력된다. 2023. 11. 2.
Unreal C++ Debug Log (BP:Print String) 출력 방법 [Unreal/C++] Debug Log (BP:Print String) 출력 방법 언리얼 블루프린트에서 Log 를 출력하는 방법은 PrintString을 사용하면 된다.Screen에 출력하는 것과 Log에 출력하는 방법 두가지가 기본적으로 체크되어 있다. 블루프린트에서 PrintString을 진행하면 위와같이 OutputLog 창과 Screen에 출력된 로그를 볼 수 있는데C++에서는 출력 방법이 나뉜다.UE_LOG로 출력하는 방법과 UEngine의 AddOnScreenDebugMessage로 출력하는 방법이 있다.UE_LOG는 define으로 정의되어 있고 Screen은 함수로 구현되어 있다.#include "Engine.h"헤더파일을 추가해야하며 컴파일 시간이 꽤 오래걸릴 수 있다. UE_LOGUE.. 2023. 11. 2.
Unreal Property System(Reflection) [Unreal] Property System(Reflection) 언리얼에서는 리플렉션 시스템을 프로퍼티라고 부른다. 왜냐하면 리플렉션은 그래픽 용어이기도 하기 때문이다. 프로퍼티 시스템에 등록했으면 하는 타입에 매크로를 달아두면 Unreal Header Tool(UHT)가 프로젝트를 컴파일할 때 정보를 수집한다.  예를 들면 다음 코드와 같다. // 리플렉션이 있는 타입은 이 헤더파일을 인클루드해서 UHT에 알린다.#include "MyObject.generated.h"// MyObject는 리플렉션 되는 클래스임을 나타낸다.UCLASS()class UMyObject : public UObject{ // 자동 생성된 코드가 여기에 삽입된다는 마커. GENERATED_BODY() .. 2023. 11. 2.
Unreal C++ Class Name.Generated.h 역할 [Unreal/C++] Class Name.Generated.h 역할 Reflection(리플렉션)이란 요약하면 프로그램의 런타임 시점에서 객체의 정보, 구조를 관리 & 수정 할 수 있게 엑세스 하는 것을 의미합니다, Java나 C# 등 에서는 리플렉션을 지원하지만 C++에서는 지원하지 않아 언리얼에서는 자체적으로 리플렉션이 구현되었습니다. 이것을 "언리얼 프로퍼티 시스템"이라고 하는데 메크로 함수 형태로 되어 있으며 이것을 통해 GC(Garbage Collection)나 블루프린트와 연동 등을 할 수 있습니다. 언리얼 엔진에서 매우 중요한 개념인 리플렉션(언리얼 프로퍼티 시스템)을 위한 헤더 파일이다. 해당 헤더가 있어야 리플렉션이 있는 유형에서 해당 클래스를 고려해야 하고 시스템 구현에 필요함을 언리.. 2023. 11. 2.
Unreal C++ CoreMinimal.h, Engine.h [Unreal/C++] CoreMinimal.h, Engine.h 언리얼 엔진은 4.16부터 IWYU 모델을 사용하여 코드 컴파일을 최적화 했다.과거에는 Engine.h를 포함했으나, Engine.h에서는 많은 헤더파일을 포함하고 있어 컴파일에 시간이 많이 소요되었다.헤더 파일을 한꺼번에 컴파일하다보니 병목현상이 발생하여 컴파일 속도를 위해 필수 헤더파일만을 포함하고 있는 CoreMinimal.h만을 포함하였다. IWYU는 Include-What-You-Use이다. 해석하자면 '너가 원하는 것만 포함'하라는 의미이다.이 모델을 사용하게 되면 각각 새로 생성한 클래스 헤더에 CoreMinimal.h를 추가하여 최소한의 코드만 클래스에 Include하여 사용하고, 이 외의 코드는 cpp소스파일에 추가한다. .. 2023. 11. 2.
Unreal C++ UE_LOG, GEngine Debug가 보이지 않는 현상 [Unreal/C++] UE_LOG, GEngine Debug가 보이지 않는 현상UE_LOG is not workingGEngine->AddOnScreenDebugMessage is not working 언리얼에서 Log를 남기기 위해 C++ 작업 도중 보이지 않는 현상은 에디터를 재시작 하면 해결된다.별거 아닌 문제지만 이러한 버그를 찾는데 검색하고 이것저것 해보는 시간을 쏟기 아깝다. 2023. 10. 29.
Unreal 프로젝트 셋팅 Export, Import [Unreal] 프로젝트 셋팅 Export, Import 언리얼에서 프로젝트 셋팅을 저장하고 불러올 수 있다.방법은 간단하다. Edit->Project Settings에 들어가서 가져오고 싶은 셋팅 내용을 Export 하여 파일로 저장한 후대상 프로젝트에서 Import를 하면 된다. 모든 셋팅을 바꾸고 싶은 경우에는 모든 셋팅에서 Export를 하면 된다. 2023. 10. 28.
Unreal C++ Timer 사용하기 [Unreal/C++] Timer 사용하기타미어는 KismetSystemLibrary.h 에 구현되어 있다.헤더#include "Kismet/KismetSystemLibrary.h"중요한 것은 delegate를 이용할 함수들은 앞에 UFUNCTION()이 붙어있어야한다. 아래는 ChangeColor함수를 1초마다 실행하는 타이머를 설정한 것이다. 2023. 10. 28.
Unreal C++ Unreal int32, int64 사용 [Unreal/C++] Unreal int32, int64 사용 언리얼은 멀티플랫폼을 지원하는 엔진이다.타겟 플랫폼이 정해졌다면 int나 uint를 마음대로 사용해도 되겠지만,다양한 플랫폼을 위해 개발할 예정이라면 명시적으로 정해진 크기의 자료형을 사용하는 것이 좋다.즉, 16bit 컴퓨터, 32bit 컴퓨터, 64bit 컴퓨터가 있을 때 int나 uint의 정해진 크기가 다를 수 있으니정해진 크기의 int8, int16, int32,,,, uint64 등을 사용하는 것이 좋다. 언리얼 공식 문서에서도 이식성이 좋은 코드를 다음과 같이 나열해놓았다.bool for boolean values (NEVER assume the size of bool). BOOL will not compile.TCHAR for.. 2023. 10. 28.
Unreal C++ Assert 검증 도구 사용하기 [Unreal/C++] Assert 검증 도구 사용하기 먼저 Assert의 국문과 영문 문서는 조금씩 달리 표현되어 있다.DO_CHECK가 check와 ensure를 관리한다고 하지만DO_ENSURE가 정의되어 있는 것으로 봐서 기능이 업데이트 되었을 가능성이 있다.포인터의 NULL 여부를 검증하거나, 특정 함수에 재진입했는지 같은 검증도 가능하다. 런타임 중 Assert 매크로를 사용하면 3가지의 동작을 얻을 수 있다.1. 실행 중지2. 디버그 중 실행 중지3. 실행을 중지하지 않고 오류만 보고 언리얼 공식 문서에 따르면 정의된 DO_CHECK나 DO_GUARD_SLOW의 상태에 따라 Assert가 실행된다고 한다.DO_CHECK나 DO_GUARD_SLOW의 정의된 값은 아래 경로에서 찾아볼 수 있다... 2023. 10. 28.
Unreal C++ 느낌표 두개 !! 이중 느낌표? [Unreal/C++] 느낌표 두개 !! 이중 느낌표? 언리얼의 코드를 들여다 보면 느낌표가 두개 붙은 표현을 자주 마주칠 것이다.결과를 먼저 말하자면 (!!) 이것은 하나의 연산자가 아닌 두 개의 연산자이다.C++에서는 사용되지 않지만 JavaScript 언어에서는 자주 사용하는 편이다. 이것은 Object != nullptr 과 같다고 생각하면 된다.! Not 연산자가 두개 쓰인 것으로 보면 된다.Object 가 nullptr이 아닐 때if(Object)는 true가 된다.if( ! Object) 는 false 이며if( ! ( ! Object) ) 는 다시 true가 된다. if( ! Object ) 는 if ( Object == nullptr) 과 같고if( ! ( ! Object ) ) 는 if.. 2023. 10. 28.
Unreal 생성자에게 도움을 주는 ConstructorHelpers [Unreal] 생성자에게 도움을 주는 ConstructorHelpers 언리얼에서는 생성자에서 에셋이나 클래스를 불러오기 쉽게 Helpers를 제공한다.#include "UObject/ConstructorHelpers.h" 헤더를 추가하면 생성자에서 ConstructorHelpers를 사용 가능하다.     내부에는 아래와 같이 구조체로 구현되어 있다.C++에서는 보지 못했던 느낌표 두개(!!) 연산자로 nullptr을 체크한다.nullptr 이 아니면 true nullptr 이면 false 새로운 방식에 익숙해져 보자 2023. 10. 28.
반응형