본문에 들어가기에 앞서...
언리얼에서 문자열을 정의할 때에는 모든 플랫폼에서 2바이트 문자열을 지원하는 TEXT 매크로를 사용하는 것이 좋다고합니다.
ex) TEXT("Hello world");
또한 문자열을 관리하는 FString으로 선언된 변수에서 문자열 정보를 얻어오려면 반드시 * 연산자를 사용해야하는데
예를 들자면
FString::Printf(TEXT("Actor Name : %s "), *GetName());
이러한 형식으로 되어야 한다는 것.
이는 언리얼 엔진만의 방식이라고 소개되어집니다.
로그 카테고리 생성하는 방법
언리얼 엔진은 로그 카테고리를 선언하기 위해 두 개의 매크로를 제공하는데, 하나는 선언부 하나는 구현부에 사용됩니다.
모듈명으로 된 헤더 파일과 소스 파일에 매크로를 각각 선언하는게 일반적인데 예를 들자면
DECLARE_LOG_CATEGORY_EXTERN(사용자 지정 이름, 로그의 레벨, ALL);
3번째 인자가 ALL인데 NoLogging, All 을 선택할 수 있다. 또한 로그의 레벨을 Fatal로 설정했을 경우
크래쉬가 일어난다.
저렇게 했을 경우 본인은 함수에 대한 정의가 없다고 나오던데... 꺼림칙하지만 아무문제 없다.
(찾아보면 인텔리센스와 언리얼간에 문제라고 검색되는 것 같은데 비쥬얼 어시스트 사용하면 괜찮다고 한다. 유-료)
사용해본적이 없어 뭐라 말할 수 없는데 유니티에 비해서 자동완성 기능이나 모든 기능이 많이 느린 느낌이다.
어쨌든 헤더부분에서 저렇게 선언해줬으면 정의를 해줘야한다.
구현부에서는
위와 같이 정의해주도록한다. ModuleName 단순히 이름이기 때문에 얼마든지 커스터마이징해서 사용하면된다.
카테고리의 이름이니까
이렇게 선언해주고 실제 액터 클래스에서 로그를 찍어보면
UE_LOG(GategoryName, LogLevel, FString); 이니까
액터 구현부의 BeginPlay()에 아래의 내용을 넣어주면
UE_LOG(ModuleName, Log, TEXT("hello world"); 라고 치면
콘솔 창에서 로그가 뜨는 것을 확인 할 수 있다.