기즈모란?
에디터에서 레벨에 배치된 액터를 선택하면 선택한 액터 중심에 기즈모(Gizmo)가 출력된다. 해당 기즈모를 통해 위치, 크기, 회전 등을 조절할 수 있다.
엔진 코드
문득 어떻게 기즈모의 코드가 궁금하여 검색을 해보았는데 Gizmo를 검색어로 아무리 찾아보아도 찾을 수 없었다. GizmoComponent가 있었으나 해당 코드는 아니였다.
결론부터 말하자면 레벨 에디터의 선택 오브젝트에 대한 기즈모 코드는 "UnrealWidget.h" 파일의 FWidget 클래스로 구현되어 있었다. 왜 클래스 명이 FWidget인지는 모르겠지만 한동안 찾아 헤매었는데 까먹지 않기 위해 기록해 놓자.
렌더 관련
레벨 에디터에서 기즈모가 렌더되는 코드부분이 궁금하여 찾아보았다. "UnrealWidgetRender.cpp"에 구현된 FWidget::Render 함수에서 현재 설정된 WidgetMode를 확인하여 각각의 렌더 함수가 호출된다.
//UnrealWidgetRender.cpp
//FWidget::Render
switch( ViewportClient->GetWidgetMode() )
{
case WM_Translate:
Render_Translate(View, PDI, ViewportClient, WidgetLocation, bDrawWidget);
break;
case WM_Rotate:
Render_Rotate(View, PDI, ViewportClient, WidgetLocation, bDrawWidget);
break;
case WM_Scale:
Render_Scale(View, PDI, ViewportClient, WidgetLocation, bDrawWidget);
break;
case WM_TranslateRotateZ:
Render_TranslateRotateZ(View, PDI, ViewportClient, WidgetLocation, bDrawWidget);
break;
case WM_2D:
Render_2D(View, PDI, ViewportClient, WidgetLocation, bDrawWidget);
break;
default:
break;
}
마치며
레벨 에디터의 선택 액터 기즈모 동작에 대한 엔진 코드를 확인하고자 한다면 "UnrealWidget.h" 의 FWidget 클래스를 확인해보자
반응형