I want to adjust the ScreenSize of LOD in Runtime

https://github.com/EpicGames/UnrealEngine/blob/5.3/Engine/Source/Editor/StaticMeshEditor/Private/StaticMeshEditorTools.cpp#L4151-L4209

I was able to change the ScreenSize dynamically by writing the following code referring to the above code.

void UMyUtils::SetLOD(UStaticMesh* Mesh)
{
	int32 NumLODs = Mesh->GetNumLODs();
	
	if (NumLODs >= 4) 
	{
#if WITH_EDITORONLY_DATA
		Mesh->bAutoComputeLODScreenSize = false;
#endif

#if WITH_EDITOR
		Mesh->GetSourceModel(0).ScreenSize = 0.5;
		Mesh->GetSourceModel(1).ScreenSize = 0.1;
		Mesh->GetRenderData()->ScreenSize[2] = 0.05;
		Mesh->GetSourceModel(3).ScreenSize = 0.002;
#endif
		Mesh->GetRenderData()->ScreenSize[0] = 0.5;
		Mesh->GetRenderData()->ScreenSize[1] = 0.1;
		Mesh->GetRenderData()->ScreenSize[2] = 0.05;
		Mesh->GetRenderData()->ScreenSize[3] = 0.002;

		{
			FStaticMeshComponentRecreateRenderStateContext ReregisterContext(Mesh, false);
			Mesh->Modify();
		}
  }
1 Like