Skip to content

UWorld Creation Flow#

UWorld::CreateWorld()
  NewObject<UWorld>()
    OnPostWorldCreation.Broadcast()
  UWorld::InitializeNewWorld
    - Create persistent level
      PersistentLevel = NewObject<ULevel>(this, TEXT("PersistentLevel"));
      PersistentLevel->Initialize(FURL(nullptr));
      PersistentLevel->Model = NewObject<UModel>(PersistentLevel);
      PersistentLevel->Model->Initialize(nullptr, 1);
      PersistentLevel->OwningWorld = this;

    - Spawn World Settings
      AWorldSettings* WorldSettings = SpawnActor<AWorldSettings>( GEngine->WorldSettingsClass, SpawnInfo );
        PersistentLevel->SetWorldSettings(WorldSettings);

    UWorld::InitWorld()
      FWorldDelegates::OnPreWorldInitialization.Broadcast(this, IVS)
      - Create various scenes/managers
        - CreatePhysicsScene(WorldSettings)
        - GetRendererModule().AllocateScene(this, bRequiresHitProxies, IVS.bCreateFXSystem, FeatureLevel)
        - CreateAISystem()
        - etc
      FWorldDelegates::OnPostWorldInitialization.Broadcast(this, IVS)
      PersistentLevel->InitializeRenderingResources()

Last update: November 14, 2019