UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DataLayerInstance.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
8#include "UObject/Object.h"
11
12#include "DataLayerInstance.generated.h"
13
14#define DATALAYER_TO_INSTANCE_RUNTIME_CONVERSION_ENABLED 1
15
17class FText;
19class UWorld;
20class UDataLayerAsset;
21class UExternalDataLayerInstance;
23
24UENUM(BlueprintType)
26{
27 // Unloaded
29
30 // Loaded (meaning loaded but not visible)
31 Loaded,
32
33 // Activated (meaning loaded and visible)
35};
36
37UENUM(BlueprintType)
39{
40 // Uses default runtime partition 'Block on Slow Streaming' setting
42 // Blocks on slow streaming (Overrides runtime partition 'Block on Slow Streaming' setting)
44 // Doesn't block on slow streaming (Overrides runtime partition 'Block on Slow Streaming' setting)
46};
47
49{
50 switch (State)
51 {
52 case EDataLayerRuntimeState::Unloaded: return TEXT("Unloaded");
53 case EDataLayerRuntimeState::Loaded: return TEXT("Loaded");
54 case EDataLayerRuntimeState::Activated: return TEXT("Activated");
55 default: check(0);
56 }
57 return TEXT("Invalid");
58}
59
60UCLASS(Config = Engine, PerObjectConfig, BlueprintType, AutoCollapseCategories = ("Data Layer|Advanced"), AutoExpandCategories = ("Data Layer|Editor", "Data Layer|Advanced|Runtime"), MinimalAPI)
61class UDataLayerInstance : public UObject
62{
64
65 friend class UDataLayerConversionInfo;
67
68public:
70
71 template<class T>
72 T* GetTypedOuter() const
73 {
74 static_assert(!std::is_same<T, UWorld>::value, "Use GetOuterWorld instead");
75 static_assert(!std::is_same<T, ULevel>::value, "Use GetOuterWorld()->PersistentLevel instead");
76 static_assert(!std::is_same<T, AWorldDataLayers>::value, "Use GetOuterWorldDataLayers or GetDirectOuterWorldDataLayers instead");
77 return Super::GetTypedOuter<T>();
78 }
79
80 ENGINE_API virtual UWorld* GetOuterWorld() const;
83
84#if WITH_EDITOR
85 //~ Begin UObject interface
86 ENGINE_API virtual bool IsAsset() const override;
88 ENGINE_API virtual void PreEditUndo() override;
89 ENGINE_API virtual void PostEditUndo() override;
90 ENGINE_API virtual bool CanEditChange(const FProperty* InProperty) const override;
91 //~ End UObject interface
92
93 // Getters/Setters
94 ENGINE_API bool SetParent(UDataLayerInstance* InParent);
95 ENGINE_API void SetVisible(bool bIsVisible);
98 void SetIsLocked(bool bInIsLocked) { bIsLocked = bInIsLocked; }
100
103 bool IsLoadedInEditor() const { return bIsLoadedInEditor; }
105 ENGINE_API virtual bool IsReadOnly(FText* OutReason = nullptr) const;
106 virtual bool IsIncludedInActorFilterDefault() const { return false; }
109
110 // Data Layer Instance features support
111 ENGINE_API bool CanBeChildOf(const UDataLayerInstance* InParent, FText* OutReason = nullptr) const;
112 ENGINE_API virtual bool CanUserAddActors(FText* OutReason = nullptr) const;
113 ENGINE_API virtual bool CanUserRemoveActors(FText* OutReason = nullptr) const;
114 ENGINE_API virtual bool CanAddActor(AActor* Actor, FText* OutReason = nullptr) const;
115 ENGINE_API virtual bool CanRemoveActor(AActor* Actor, FText* OutReason = nullptr) const;
116 ENGINE_API virtual bool CanBeInActorEditorContext() const;
117 virtual bool CanBeRemoved() const { return true; }
118 virtual bool CanEditDataLayerShortName() const { return false; }
119 virtual bool SupportsActorFilters() const { return false; }
120 virtual const UExternalDataLayerInstance* GetRootExternalDataLayerInstance() const { return nullptr; }
121
122 // Actor assignation and removal
123 ENGINE_API virtual bool AddActor(AActor* Actor) const;
124 ENGINE_API virtual bool RemoveActor(AActor* Actor) const;
125
126 // Actor Editor Context
131
132 // Validation
133 ENGINE_API virtual bool Validate(IStreamingGenerationErrorHandler* ErrorHandler) const;
134
135 // Helpers
136 ENGINE_API virtual const TCHAR* GetDataLayerIconName() const;
137 static ENGINE_API FText GetDataLayerText(const UDataLayerInstance* InDataLayer);
140
141 //~Begin deprecation
142 UE_DEPRECATED(5.4, "Implement the version that takes FAssetRegistryTagsContext instead.")
143 ENGINE_API virtual void GetAssetRegistryTags(TArray<FAssetRegistryTag>& OutTags) const override;
144
145 UE_DEPRECATED(5.4, "SetChildParent was removed.")
146 ENGINE_API void SetChildParent(UDataLayerInstance* InParent);
147
148 UE_DEPRECATED(5.4, "Use IsReadOnly instead")
149 virtual bool IsLocked() const { FText Reason; return IsLocked(&Reason); }
150
151 UE_DEPRECATED(5.3, "Use CanEditShortName instead")
152 virtual bool SupportRelabeling() const { return false; }
153
154 UE_DEPRECATED(5.3, "Use SetShortName instead")
155 virtual bool RelabelDataLayer(FName NewDataLayerLabel) { return false; }
156
157 UE_DEPRECATED(5.3, "Use CanBeChildOf instead")
158 bool CanParent(const UDataLayerInstance* InParent) const { return CanBeChildOf(InParent); }
159 //~End deprecation
160#endif // WITH_EDITOR
161
162 UFUNCTION(Category = "Data Layer", BlueprintCallable)
163 virtual EDataLayerType GetType() const { return EDataLayerType::Unknown; }
164
165 UFUNCTION(Category = "Data Layer|Editor", BlueprintCallable)
166 ENGINE_API bool IsInitiallyVisible() const;
167
168 UFUNCTION(Category = "Data Layer|Editor", BlueprintCallable)
169 ENGINE_API bool IsVisible() const;
170
171 UFUNCTION(Category = "Data Layer|Editor", BlueprintCallable)
172 ENGINE_API bool IsEffectiveVisible() const;
173
174 UFUNCTION(Category = "Data Layer|Runtime", BlueprintCallable)
175 virtual bool IsRuntime() const { return false; }
176
177 UFUNCTION(Category = "Data Layer|Runtime", BlueprintCallable)
178 virtual bool IsClientOnly() const { return false; }
179
180 UFUNCTION(Category = "Data Layer|Runtime", BlueprintCallable)
181 virtual bool IsServerOnly() const { return false; }
182
183 UFUNCTION(Category = "Data Layer|Runtime", BlueprintCallable)
184 virtual FColor GetDebugColor() const { return FColor::Black; }
185
186 UFUNCTION(Category = "Data Layer|Runtime", BlueprintCallable)
187 EDataLayerRuntimeState GetInitialRuntimeState() const { return IsRuntime() ? InitialRuntimeState : EDataLayerRuntimeState::Unloaded; }
188
189 UFUNCTION(Category = "Data Layer", BlueprintCallable)
190 virtual FString GetDataLayerShortName() const { return TEXT("Invalid Data Layer"); }
191
192 UFUNCTION(Category = "Data Layer", BlueprintCallable)
193 virtual FString GetDataLayerFullName() const { return TEXT("Invalid Data Layer"); }
194
195 virtual bool CanHaveChildDataLayerInstance(const UDataLayerInstance* InChildDataLayerInstance) const { return InChildDataLayerInstance != nullptr; }
196 virtual bool CanHaveParentDataLayerInstance() const { return true; }
197 UE_DEPRECATED(5.4, "Use CanHaveParentDataLayerInstance instead")
199 UE_DEPRECATED(5.4, "Use CanHaveChildDataLayer instead")
200 virtual bool CanHaveChildDataLayers() const { return true; }
201
202 const UDataLayerInstance* GetParent() const { return Parent; }
203 UDataLayerInstance* GetParent() { return Parent; }
204
205 virtual bool CanEditInitialRuntimeState() const { return IsRuntime(); }
208
209 UFUNCTION(Category = "Data Layer", BlueprintCallable)
210 virtual const UDataLayerAsset* GetAsset() const { return nullptr; }
211
212 const TArray<TObjectPtr<UDataLayerInstance>>& GetChildren() const { return Children; }
213 ENGINE_API void ForEachChild(TFunctionRef<bool(const UDataLayerInstance*)> Operation) const;
214
215#if DATALAYER_TO_INSTANCE_RUNTIME_CONVERSION_ENABLED
216public:
217 virtual FName GetDataLayerFName() const { return GetFName(); }
218
219private:
220 FName GetFName() const { return Super::GetFName(); }
221 FString GetName() const { return Super::GetName(); }
222#endif // DATALAYER_TO_INSTANCE_RUNTIME_CONVERSION_ENABLED
223
224protected:
225#if WITH_EDITOR
226 ENGINE_API bool IsLocked(FText* OutReason) const;
227 ENGINE_API bool IsParentDataLayerTypeCompatible(const UDataLayerInstance* InParent, FText* OutReasonText = nullptr, IStreamingGenerationErrorHandler::EDataLayerHierarchyInvalidReason* OutReason = nullptr) const;
228
229 virtual bool PerformAddActor(AActor* InActor) const { return false; }
230 virtual bool PerformRemoveActor(AActor* InActor) const { return false; }
231 virtual void PerformSetDataLayerShortName(const FString& InNewShortName) {}
232#endif
233
234#if WITH_EDITORONLY_DATA
237 uint32 bIsVisible : 1;
238
240 UPROPERTY(Category = "Editor", EditAnywhere)
242
244 UPROPERTY(Category = "Editor", EditAnywhere, meta = (DisplayName = "Is Initially Loaded"))
246
251
255
257 UPROPERTY()
258 uint32 bIsLocked : 1;
259
260 UPROPERTY(Category = "Runtime|Advanced", EditAnywhere)
262
264 UPROPERTY(Category = "Runtime|Advanced", EditAnywhere)
266#endif
267
269 UPROPERTY(Category = "Runtime", EditAnywhere)
270 EDataLayerRuntimeState InitialRuntimeState;
271
272private:
273
274#if WITH_EDITOR
277 ENGINE_API void RemoveChild(UDataLayerInstance* DataLayer);
278#endif
279 ENGINE_API void AddChild(UDataLayerInstance* DataLayer);
280
281 UPROPERTY()
282 TObjectPtr<UDataLayerInstance> Parent;
283
285 TArray<TObjectPtr<UDataLayerInstance>> Children;
286
290};
#define check(expr)
Definition AssertionMacros.h:314
bool IsRuntime(const UBodySetup *BS)
Definition BodySetup.cpp:381
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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
EOverrideBlockOnSlowStreaming
Definition DataLayerInstance.h:39
EDataLayerRuntimeState
Definition DataLayerInstance.h:26
const TCHAR * GetDataLayerRuntimeStateName(EDataLayerRuntimeState State)
Definition DataLayerInstance.h:48
EDataLayerType
Definition DataLayerType.h:9
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Actor.h:257
Definition WorldDataLayers.h:85
Definition Engine.Build.cs:7
Definition AssetRegistryTagsContext.h:98
Definition DataLayerUtils.h:21
Definition NameTypes.h:617
Definition UnrealType.h:3087
Definition UnrealType.h:174
Definition Text.h:385
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition DataLayerAsset.h:30
Definition DataLayerManager.h:48
Definition Object.h:95
virtual COREUOBJECT_API bool IsAsset() const
Definition Obj.cpp:2704
virtual COREUOBJECT_API void GetAssetRegistryTags(FAssetRegistryTagsContext Context) const
Definition Obj.cpp:2423
Definition World.h:918
ECollisionShapeType GetType(const Chaos::FImplicitObject &InGeometry)
Definition ChaosInterfaceWrapperCore.h:105
void RemoveActor(FDatasmithSceneImpl *SceneImpl, ContainerType &ActorContainer, SharedPtrElementType &InActor, EDatasmithActorRemovalRule RemoveRule)
Definition DatasmithSceneElementsImpl.cpp:1312
IMAGECORE_API const TCHAR * GetName(Type Format)
Definition ImageCore.cpp:1378
FName GetFName(const UObject *Obj)
Definition ObjectFwd.cpp:13
Definition AssetData.h:162
Definition Color.h:486
static CORE_API const FColor Black
Definition Color.h:750
Definition ObjectPtr.h:488