[Unreal_Engine]모바일 디바이스에서 stat 글씨 크기 늘리기

2024. 4. 5. 11:21unreal/UnrealCode

언리얼 엔진에서 모바일 디바이스 빌드를 하고

stat 명령으로 프로파일링을 하게되면 글자가 너무 작아서

adb로 연결해서 보곤합니다

 

하지만 렌더링 퍼포먼스 체크등을 이유로 외부 요인 없이 디바이스에서만 stat 명령어를 봐야할 상황에

글자 크기가 너무 작아 보기 힘든데요

 

글자 크기가 작은이유는

dpi 베이스 이기때문입니다.

요새 디바이스들은 dpi가 높아서( 보통 qhd급 해상도) 대비해서 글자가 매우 작은것입니다..

21울트라에서 fps를 띠워두었습니다.

우측 상단에 아주작게 보입니다.

 

키우는법을 찾아보겠습니다.

가장 많이 쓰는 명령어인

stat fps 를 검색을 합니다

 

 

뭔가 걸렸군요

engine.h 파일을 열어 아래로 좀 내리다보니

저거일거같은 느낌이 팍드는 함수가 있습니다.

들어가 봅니다.

 

int32 UEngine::RenderStatFPS(UWorld* World, FViewport* Viewport, FCanvas* Canvas, int32 X, int32 Y, const FVector* ViewLocation, const FRotator* ViewRotation)
{
	// Pick a larger font on console.
	UFont* Font = FPlatformProperties::SupportsWindowedMode() ? GetSmallFont() : GetMediumFont();

	// Choose the counter color based on the average frame time.
	const FColor FPSColor = GetFrameTimeDisplayColor(GAverageMS);

	// Start drawing the various counters.
	const int32 RowHeight = FMath::TruncToInt(Font->GetMaxCharHeight() * 1.1f);

	if (CustomTimeStep)
	{
		ECustomTimeStepSynchronizationState State = CustomTimeStep->GetSynchronizationState();
		FString CustomTimeStepName = CustomTimeStep->GetName();
		int32 NewX = X - Font->GetStringSize(*CustomTimeStepName);
		switch (State)
		{
		case ECustomTimeStepSynchronizationState::Closed:
			Canvas->DrawShadowedString(NewX, Y, *FString::Printf(TEXT("%s : Closed"), *CustomTimeStepName), Font, FColor::Red);
			break;
		case ECustomTimeStepSynchronizationState::Error:
			Canvas->DrawShadowedString(NewX, Y, *FString::Printf(TEXT("%s : Error"), *CustomTimeStepName), Font, FColor::Red);
			break;
		case ECustomTimeStepSynchronizationState::Synchronized:
			Canvas->DrawShadowedString(NewX, Y, *FString::Printf(TEXT("%s : Synchronized"), *CustomTimeStepName), Font, FColor::Green);
			break;
		case ECustomTimeStepSynchronizationState::Synchronizing:
			Canvas->DrawShadowedString(NewX, Y, *FString::Printf(TEXT("%s : Synchronizing"), *CustomTimeStepName), Font, FColor::Yellow);
			break;
		default:
			check(false);
			break;
		}
		Y += RowHeight;
	}

	// Draw the FPS counter.
	Canvas->DrawShadowedString(
		X,
		Y,
		*FString::Printf(TEXT("%5.2f FPS"), GAverageFPS),
		Font,
		FPSColor
	);
	Y += RowHeight;

	// Draw the frame time.
	Canvas->DrawShadowedString(
		X,
		Y,
		*FString::Printf(TEXT("%5.2f ms"), GAverageMS),
		Font,
		FPSColor
	);
	Y += RowHeight;

	return Y;
}

 

접근해서 바꾸면 될것같은 부분이 두곳정도 보입니다.

폰트를 가져오는 부분과

스테이트를 그리는 드로우 함수입니다.

 

처음에 드로우 함수로 들어가서 크기를 키워보니

크기만 커지고 간격조절이 되지 않아(이부분이 드로우 함수가 실행되기 전에 이미 결정이 납니다)

불가능하고

결국 폰트를 갖고 오는 부분을 수정하는게 맞다는 결론을 내렸습니다.

 

보니 폰트는 엔진에 설정한 small font와 mediumfont 중에 현재 모드에 따라 가져와서 그 폰트를 사용하는것으로 보입니다.

 

어떠한 부분을 수정해야하는지 확인했으니

에디터로 돌아가서 수정을 진행합니다.

 

프로젝트 세팅에서 폰트를 검색하면

각 폰트의 기본을 설정 가능합니다.

아까 봣던 tiny 와 small 에 새로운 폰트를 생성해서 적용후 더블클릭을 하면

 

이렇게  legacy font size 라는 폰트의 기본 사이즈를 조절할 수 있습니다.

 

 

 

 

이방법은 실시간으로 수정하거나 변경할 수 없고 엔진에서 사용되는 폰트 사이즈를 고정을 시켜버린다는 단점이 있어

런타임에서 변경할 수 있도록 치트를 사용해 콘솔 명령어로 변경하도록 했습니다.

 

일단 사이즈를 키울 콘솔 명령어가 들어있는 소스에 콘솔 치트를 추가해줍니다

저는 stat fps 보다 stat unit 쪽을 자주보기때문에 unrealClient.cpp 에 해당 콘솔 명령어를 추가해주었습니다.

기본값은 20으로 

 

아까 stat fps 쪽과 같은지점에 저의가 확인한 사이즈를 변경 할 수 있는 부분이 있습니다

폰트를 가져온뒤에 변경할것이기에

"UFont* " 를 검색을 합니다.(해당 cpp안에서만)

 

 

 

UFont* Font = (!FPlatformProperties::SupportsWindowedMode() && GEngine->GetMediumFont()) ? GEngine->GetMediumFont() : GEngine->GetSmallFont();

 

UFont* SmallFont = GEngine->GetSmallFont();

 

두개가 걸리는데

하나는 에디터상처리고 하나는 빌드된 앱에서 처리입니다

 

둘다 위에서 설정한 치르의 값으로 기본값을 변경해 줍니다.

 

SmallFont->LegacyFontSize = CVarResizeUnitTextSize.GetValueOnAnyThread();

 

 

결과

해당 치트는 기본값이 설정되있기때문에 stat unit 을 실행하면 자동으로 적용되게 되어있습니다.

엔진에서 사용하는 전체 tiny 폰트 사이즈를 전부 조절하기에 일일이 조절할 필요는 없지만

의도하지 않게 커지는 경우도 있습니다

stat engine 같은경우는 화면을 넘어갑니다 반대로 개별로 폰트 사이즈를 조절하면 크게 보고싶은 stat 명령마다 크기를 지정해주어야합니다