게임 개발/Unreal Engine

[UE4] WITH_EDITOR, WITH_EDITORONLY_DATA, GIsEditor

지노윈 2022. 6. 18. 14:02
반응형

WITH_EDITOR

/**  
 * Whether we are compiling with the editor;must be defined by UBT  
 */

Editor가 컴파일될때 WITH_EDITOR의 코드가 컴파일된다는 것을 의미합니다.

GIsEditor

/** 
 *	True if we are in the editor. 
 *	Note that this is still true when using Play In Editor. You may want to use GWorld->HasBegunPlay in that case. 
 */

Editor에서 실행하는 코드의 경우 사용합니다. 유의점은 PIE(Play In Editor)에서도 여전히 Editor이므로 이런 경우에는 GWorld->HasBegunPlay()를 사용합니다.

WITH_EDITORONLY_DATA

Reflected 멤버를 래핑하기 위한 헤더에서는 WITH_EDITORONLY_DATA를 사용하며,
코드용 CPP 파일에서는 WITH_EDITOR를사용합니다.

다음의 코드는 패키징을 위해 컴파일할때 오류가 발생합니다.

class AMyActor : public AActor 
{
public: 
# if WITH_EDITOR
	UPROPERTY() 
	FString Name; 
# endif 
void Test(); 
}

void AMyActor::Test() 
{ 
# if WITH_EDITOR
     Name = GetName(); 
# endif
 }

MyActor.gen.cpp에서 오류가 발생하는데, 이는 UHT가 WITH_EDITOR 헤더 파일의 매크로를 인식하지 못한다는 의미입니다.

Error: UProperties should not be wrapped by WITH_EDITOR, use WITH_EDITORONLY_DATA instead


즉, 헤더파일의 UPROPERTY 및 UFUNCTION으로 래핑된 멤버는 WITH_EDITORONLY_DATA를 사용합니다. 그리고, 헤더 파일이 아닌 CPP 코드에서는 WITH_EDITOR를 사용합니다.