message: merge ios/android
diff: #include <memory>
  #include <spdlog/spdlog.h>
  +#if PLATFORM_ANDROID || PLATFORM_IOS
  +#include "GenericPlatform/GenericPlatformApplicationMisc.h"
  +#endif
  +
  FCesium3DTilesetLoadFailure OnCesium3DTilesetLoadFailure{};
  #if WITH_EDITOR
  @@ -751,6 +755,21 @@ private:
  #endif
  };
  +static float getDevicePixelRatio(const UObject* WorldContextObject) {
  +#if PLATFORM_ANDROID || PLATFORM_IOS
  + int32 screenDensity;
  + FGenericPlatformApplicationMisc::GetPhysicalScreenDensity(screenDensity);
  + return screenDensity / 160.0f;
  +#else
  + UWorld* world = WorldContextObject->GetWorld();
  + if (IsValid(world) && world->GetGameViewport()) {
  + return world->GetGameViewport()->GetDPIScale();
  + } else {
  + return 1.0f;
  + }
  +#endif
  +}
  +
  static std::string getCacheDatabaseName() {
  #if PLATFORM_ANDROID
  FString BaseDirectory = FPaths::ProjectPersistentDownloadDir();
  @@ -1459,34 +1478,6 @@ void applyActorCollisionSettings(
  }
  }
  }
  -
  -float getDevicePixelRatio(const UObject* WorldContextObject) {
  -#if PLATFORM_IOS
  - FDisplayMetrics DisplayMetrics;
  - FDisplayMetrics::RebuildDisplayMetrics(FDisplayMetrics);
  -
  - float LogicalWidth = DisplayMetrics.IosUiWindowAreaRect.Right -
  - DisplayMetrics.IosUiWindowAreaRect.Left;
  - float LogicalHeight = DisplayMetrics.IosUiWindowAreaRect.Bottom -
  - DisplayMetrics.IosUiWindowAreaRect.Top;
  -
  - return FMath::Min(
  - DisplayMetrics.PrimaryDisplayWidth / LogicalWidth,
  - PrimaryDisplayHeight / LogicalHeight);
  -#elif PLATFORM_ANDROID
  - int32 screenDensity;
  - FGenericPlatformApplicationMisc::GetPhysicalScreenDensity(screenDensity);
  - return screenDensity / 160.0f;
  -#else
  - UWorld* world = WorldContextObject->GetWorld();
  - if (IsValid(world) && world->GetGameViewport()) {
  - return world->GetGameViewport()->GetDPIScale();
  - } else {
  - return 1.0f;
  - }
  -#endif
  -}
  -
  } // namespace
  void ACesium3DTileset::updateTilesetOptionsFromProperties() {
  