UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WorldPartitionSubsystem.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
11#include "Containers/Map.h"
12#include "Containers/Set.h"
13#include "Misc/Guid.h"
14#include "WorldPartitionSubsystem.generated.h"
15
16class ULevel;
17class ULevelStreaming;
18class UWorldPartition;
23
25enum class ELevelStreamingState : uint8;
27
32{
34 void Invalidate() { bIsValid = false; }
35 bool IsValid() { return bIsValid; }
36 FVector GetAverageVelocity(const FVector& NewPosition, double CurrentTime);
37
38private:
39 bool bIsValid;
40 FName SourceName;
41 double LastUpdateTime;
42 FVector LastPosition;
43 FVector AvgVelocity;
44};
45
50UCLASS(MinimalAPI)
52{
54
55public:
57
58 //~ Begin USubsystem Interface.
60 ENGINE_API virtual void Deinitialize() override;
61 //~ End USubsystem Interface.
62
63 //~ Begin UWorldSubsystem Interface.
64 ENGINE_API virtual void OnWorldBeginPlay(UWorld& InWorld) override;
65 ENGINE_API virtual void OnWorldComponentsUpdated(UWorld& World) override;
66 //~ End UWorldSubsystem Interface.
67
68 //~Begin IStreamingWorldSubsystemInterface
69 ENGINE_API virtual void OnUpdateStreamingState() override;
70 //~End IStreamingWorldSubsystemInterface
71
72 //~ Begin FTickableGameObject
73 ENGINE_API virtual void Tick(float DeltaSeconds) override;
74 virtual bool IsTickableInEditor() const override { return true; }
75 ENGINE_API virtual ETickableTickType GetTickableTickType() const override;
76 ENGINE_API virtual TStatId GetStatId() const override;
77 //~End FTickableGameObject
78
79 UFUNCTION(BlueprintCallable, Category = Streaming)
81
83 UFUNCTION(BlueprintCallable, Category = Streaming)
84 ENGINE_API bool IsAllStreamingCompleted();
85
86 /*
87 * Returns true if world partition is done streaming levels, adding them to the world or removing them from the world.
88 * When provided, the test is reduced to streaming levels affected by the optional streaming source provider.
89 */
90 ENGINE_API bool IsStreamingCompleted(const IWorldPartitionStreamingSourceProvider* InStreamingSourceProvider = nullptr) const;
91
92 ENGINE_API void DumpStreamingSources(FOutputDevice& OutputDevice) const;
93 ENGINE_API void DumpWorldPartitions(FOutputDevice& OutputDevice) const;
94
95 ENGINE_API TSet<IWorldPartitionStreamingSourceProvider*> GetStreamingSourceProviders() const;
96 ENGINE_API void RegisterStreamingSourceProvider(IWorldPartitionStreamingSourceProvider* StreamingSource);
97 ENGINE_API bool IsStreamingSourceProviderRegistered(IWorldPartitionStreamingSourceProvider* StreamingSource) const;
98 ENGINE_API bool UnregisterStreamingSourceProvider(IWorldPartitionStreamingSourceProvider* StreamingSource);
99
102
105
108
109 ENGINE_API void ForEachWorldPartition(TFunctionRef<bool(UWorldPartition*)> Func);
110
111#if !UE_BUILD_SHIPPING
112 static ENGINE_API void SetOverrideLoadingRange(FName Name, int32 LoadingRange);
113 static ENGINE_API bool GetOverrideLoadingRange(FName Name, int32& LoadingRange);
114 static ENGINE_API uint32 GetOverriddenLoadingRangesEpoch();
115#endif
116
117#if WITH_EDITOR
120
122
123 UE_DEPRECATED(5.4, "Use UActorDescContainerSubsystem instead")
124 UActorDescContainer* RegisterContainer(FName PackageName) { return nullptr; }
125 UE_DEPRECATED(5.4, "Use UActorDescContainerSubsystem instead")
127 UE_DEPRECATED(5.4, "Use UActorDescContainerSubsystem instead")
128 FBox GetContainerBounds(FName PackageName) const { return FBox(); }
129 UE_DEPRECATED(5.4, "Use UActorDescContainerSubsystem instead")
130 void UpdateContainerBounds(FName PackageName) { }
131
133private:
135#endif
136
137protected:
138 //~ Begin USubsystem Interface.
139 ENGINE_API virtual bool DoesSupportWorldType(const EWorldType::Type WorldType) const override;
140 //~ End USubsystem Interface.
141
142private:
143#if !UE_BUILD_SHIPPING
144 static TMap<FName, int32> OverriddenLoadingRanges;
145 static uint32 OverriddenLoadingRangesEpoch;
146 static class FAutoConsoleCommand OverrideLoadingRangeCommand;
147#endif
148
149 // Streaming Sources
150 void UpdateStreamingSources();
152 uint32 GetStreamingSourcesHash() const { return StreamingSourcesHash; }
153
154 void OnWorldPartitionInitialized(UWorldPartition* InWorldPartition);
155 void OnWorldPartitionUninitialized(UWorldPartition* InWorldPartition);
156 void OnLevelStreamingStateChanged(UWorld* InWorld, const ULevelStreaming* InStreamingLevel, ULevel* LevelIfLoaded, ELevelStreamingState PreviousState, ELevelStreamingState NewState);
158 void OnLevelBeginMakingVisible(UWorld* InWorld, const ULevelStreaming* InStreamingLevel, ULevel* InLoadedLevel);
159 void OnLevelBeginMakingInvisible(UWorld* InWorld, const ULevelStreaming* InStreamingLevel, ULevel* InLoadedLevel);
160 void UpdateLoadingAndPendingLoadStreamingLevels(const ULevelStreaming* InStreamingLevel);
161 bool IncrementalUpdateStreamingState();
162
163 // Server information
164 uint32 GetServerClientsVisibleLevelsHash() const { return ServerClientsVisibleLevelsHash; }
165 void UpdateServerClientsVisibleLevelNames();
166
167 static ENGINE_API void UpdateStreamingStateInternal(const UWorld* InWorld, UWorldPartition* InWorldPartition = nullptr);
168 static bool IsServer(const UWorld* InWorld);
169
170 ENGINE_API bool HasAnyWorldPartitionServerStreamingEnabled() const;
171 ENGINE_API bool HasUninitializationPendingStreamingLevels(const UWorldPartition* InWorldPartition) const;
172
175 ENGINE_API bool CanDebugDraw() const;
176 ENGINE_API void Draw(class UCanvas* Canvas, class APlayerController* PC);
177 ENGINE_API void DrawStreamingStatusLegend(class UCanvas* Canvas, FVector2D& Offset, const UWorldPartition* InWorldPartition);
178 friend class UWorldPartition;
180
181 // Registered world partitions & incremental update
182 TArray<TObjectPtr<UWorldPartition>> RegisteredWorldPartitions;
183 TSet<TObjectPtr<UWorldPartition>> IncrementalUpdateWorldPartitions;
184 TSet<TObjectPtr<UWorldPartition>> IncrementalUpdateWorldPartitionsPendingAdd;
185
186 // Streaming Sources
187 TSet<IWorldPartitionStreamingSourceProvider*> StreamingSourceProviders;
188 FWorldPartitionStreamingSourceProviderFilter IsStreamingSourceProviderFiltered;
189 FWorldPartitionStreamingStateUpdated StreamingStateUpdated;
191 TMap<FName, FStreamingSourceVelocity> StreamingSourcesVelocity;
192 uint32 StreamingSourcesHash;
193
194 // Server information
195 int32 NumWorldPartitionServerStreamingEnabled;
196 TSet<FName> ServerClientsVisibleLevelNames;
197 uint32 ServerClientsVisibleLevelsHash;
198
199 // Debug draw
200 TArray<FWorldPartitionDraw2DContext> WorldPartitionsDraw2DContext;
201 FDelegateHandle DrawHandle;
202
203 // GC backup values
204 int32 LevelStreamingContinuouslyIncrementalGCWhileLevelsPendingPurge;
205 int32 LevelStreamingForceGCAfterLevelStreamedOut;
206
207 // Tracks streaming levels of uninitialized world partition used to delay next initialization until they're done being removed
208 TMap<FSoftObjectPath, TSet<TWeakObjectPtr<UWorldPartitionLevelStreamingDynamic>>> WorldPartitionUninitializationPendingStreamingLevels;
209
210 // Tracks world partition loading and pending loads
211 TSet<TWeakObjectPtr<const ULevelStreaming>> WorldPartitionLoadingAndPendingLoadStreamingLevels;
212
213 bool bHasBegunPlay = false;
214
215#if WITH_EDITOR
217#endif
218};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ELevelStreamingState
Definition LevelStreaming.h:111
ELevelStreamingTargetState
Definition LevelStreaming.h:124
UE::Math::TBox< double > FBox
Definition MathFwd.h:55
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define UCLASS(...)
Definition ObjectMacros.h:776
ETickableTickType
Definition Tickable.h:20
uint32 Offset
Definition VulkanMemory.cpp:4033
EWorldPartitionActorFilterType
Definition WorldPartitionActorFilter.h:13
EWorldPartitionRuntimeCellState
Definition WorldPartitionRuntimeCell.h:202
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition PlayerController.h:261
Definition IConsoleManager.h:2026
Definition IDelegateInstance.h:14
Definition NameTypes.h:617
Definition OutputDevice.h:133
Definition SubsystemCollection.h:15
Definition WorldPartitionActorDesc.h:282
Definition WorldPartitionDraw2DContext.h:117
Definition StreamingWorldSubsystemInterface.h:16
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition UnrealString.h.inl:34
Definition DelegateSignatureImpl.inl:1029
Definition ActorDescContainer.h:40
Definition Canvas.h:159
Definition LevelStreaming.h:139
Definition Level.h:423
Definition WorldSubsystem.h:76
Definition WorldPartitionLevelStreamingDynamic.h:26
Definition WorldPartitionStreamingPolicy.h:94
Definition WorldPartitionSubsystem.h:52
static ENGINE_API TMulticastDelegate< void(UWorldPartitionSubsystem *, UWorld *)> OnWorldPartitionSubsystemInitialized
Definition WorldPartitionSubsystem.h:106
static ENGINE_API TMulticastDelegate< void(UWorldPartitionSubsystem *, UWorld *)> OnWorldPartitionSubsystemDeinitialized
Definition WorldPartitionSubsystem.h:107
FWorldPartitionStreamingStateUpdated & OnStreamingStateUpdated()
Definition WorldPartitionSubsystem.h:104
virtual bool IsTickableInEditor() const override
Definition WorldPartitionSubsystem.h:74
DECLARE_MULTICAST_DELEGATE(FWorldPartitionStreamingStateUpdated)
FWorldPartitionStreamingSourceProviderFilter & OnIsStreamingSourceProviderFiltered()
Definition WorldPartitionSubsystem.h:101
DECLARE_DELEGATE_RetVal_OneParam(bool, FWorldPartitionStreamingSourceProviderFilter, const IWorldPartitionStreamingSourceProvider *)
Definition WorldPartition.h:142
Definition World.h:918
Type
Definition EngineTypes.h:1264
UWorldPartition * GetWorldPartition(const T *InObject)
Definition WorldPartitionHelpers.h:27
void Draw(const FLinearBoundary &Boundary, const FRestrictionCurve &Curve, EVisuProperty Property)
Definition Display.cpp:95
Definition WorldPartitionActorContainerID.h:44
Definition WorldPartitionSubsystem.h:32
bool IsValid()
Definition WorldPartitionSubsystem.h:35
void Invalidate()
Definition WorldPartitionSubsystem.h:34
FVector GetAverageVelocity(const FVector &NewPosition, double CurrentTime)
Definition WorldPartitionSubsystem.cpp:1691
Definition WorldPartitionActorFilter.h:23
Definition WorldPartitionStreamingSource.h:546
Definition LightweightStats.h:416