UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ComponentInstanceDataCache.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "UObject/Object.h"
9#include "ComponentInstanceDataCache.generated.h"
10
11class AActor;
12class UActorComponent;
13class USceneComponent;
15
18{
19 PostSimpleConstructionScript, // After the simple construction script has been run
20 PostUserConstructionScript, // After the user construction script has been run
21 NonConstructionScript // Not called during the construction script process
22};
23
24UENUM()
36
37UE_DEPRECATED(5.1, "FActorComponentDuplicatedObjectData has been renamed to FDataCacheDuplicatedObjectData")
39
40USTRUCT()
42{
44
45 FDataCacheDuplicatedObjectData(UObject* InObject = nullptr);
46
47 bool Serialize(FArchive& Ar);
48
49 // The duplicated object
51
52 // Object Outer Depth so we can sort creation order
54};
55
56// Trait to signal ActorCompomentInstanceData duplicated objects uses a serialize function
57template<>
59{
60 enum
61 {
63 };
64};
65
67USTRUCT()
69{
71
73
74 ENGINE_API virtual void AddReferencedObjects(FReferenceCollector& Collector);
75
76 UE_DEPRECATED(5.3, "Use GetUniqueTransientObject instead")
78 UObject* GetUniqueTransientPackage() { return GetUniqueTransientObject(UObject::StaticClass()); }
79
81 ENGINE_API UObject* GetUniqueTransientObject(UClass* Class);
82
83 const TArray<FDataCacheDuplicatedObjectData>& GetDuplicatedObjects() const { return DuplicatedObjects; }
84 const TArray<TObjectPtr<UObject>>& GetReferencedObjects() const { return ReferencedObjects; }
85 const TArray<uint8>& GetSavedProperties() const { return SavedProperties; }
86
87protected:
88 UPROPERTY()
89 TArray<uint8> SavedProperties;
90
94
99 UPROPERTY()
100 FDataCacheDuplicatedObjectData UniqueTransientPackage;
101
102 // Duplicated objects created when saving instance properties
103 UPROPERTY()
104 TArray<FDataCacheDuplicatedObjectData> DuplicatedObjects;
105
106 // Referenced objects in instance saved properties
107 UPROPERTY()
108 TArray<TObjectPtr<UObject>> ReferencedObjects;
109
110 // Referenced names in instance saved properties
111 UPROPERTY()
112 TArray<FName> ReferencedNames;
113};
114
115USTRUCT()
117{
119
120public:
122 ENGINE_API explicit FActorComponentInstanceSourceInfo(const UActorComponent* SourceComponent);
124
126 ENGINE_API bool MatchesComponent(const UActorComponent* Component) const;
127 ENGINE_API bool MatchesComponent(const UActorComponent* Component, const UObject* ComponentTemplate) const;
128
129 ENGINE_API void AddReferencedObjects(FReferenceCollector& Collector);
130
131private:
133 UPROPERTY()
134 TObjectPtr<const UObject> SourceComponentTemplate = nullptr;
135
137 UPROPERTY()
138 EComponentCreationMethod SourceComponentCreationMethod = EComponentCreationMethod::Native;
139
142 UPROPERTY()
143 int32 SourceComponentTypeSerializedIndex = INDEX_NONE;
144};
145
147USTRUCT()
149{
151public:
154
156 ENGINE_API bool MatchesComponent(const UActorComponent* Component, const UObject* ComponentTemplate) const;
157
159 virtual bool ContainsData() const { return SavedProperties.Num() > 0; }
160
162 ENGINE_API virtual void ApplyToComponent(UActorComponent* Component, const ECacheApplyPhase CacheApplyPhase);
163
166
167 ENGINE_API virtual void AddReferencedObjects(FReferenceCollector& Collector) override;
168
169 const UClass* GetComponentClass() const { return SourceComponentTemplate ? SourceComponentTemplate->GetClass() : nullptr; }
170
171 const UObject* GetComponentTemplate() const { return SourceComponentTemplate; }
172
173protected:
174
176 UPROPERTY()
177 TObjectPtr<const UObject> SourceComponentTemplate;
178
180 UPROPERTY()
181 EComponentCreationMethod SourceComponentCreationMethod;
182
185 UPROPERTY()
186 int32 SourceComponentTypeSerializedIndex;
187};
188
190USTRUCT()
192{
194public:
196 ENGINE_API FActorInstanceData(const AActor* SourceActor);
197
198 ENGINE_API const UClass* GetActorClass() const;
199
200 bool HasInstanceData() const { return GetSavedProperties().Num() > 0; }
201
203 ENGINE_API void ApplyToActor(AActor* Actor, const ECacheApplyPhase CacheApplyPhase);
204
205protected:
206
208 UPROPERTY()
209 TSubclassOf<AActor> ActorClass;
210};
211
217{
218public:
219
221
224
226
230
234
236 ENGINE_API void Serialize(FArchive& Ar);
237
239 ENGINE_API void ApplyToActor(AActor* Actor, const ECacheApplyPhase CacheApplyPhase) const;
240
242 ENGINE_API void FindAndReplaceInstances(const TMap<UObject*, UObject*>& OldToNewInstanceMap);
243
244 bool HasInstanceData() const { return ComponentsInstanceData.Num() > 0; }
245
246 ENGINE_API void AddReferencedObjects(FReferenceCollector& Collector);
247
249
250private:
251 // called during de-serialization to copy serialized properties over existing component instance data and keep non UPROPERTY data intact
253
256
258 TMap< TObjectPtr<USceneComponent>, FTransform > InstanceComponentTransformToRootMap;
259};
ECacheApplyPhase
Definition ComponentInstanceDataCache.h:18
EComponentCreationMethod
Definition ComponentInstanceDataCache.h:26
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#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
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Actor.h:257
Definition Archive.h:1208
Definition ComponentInstanceDataCache.h:217
FComponentInstanceDataCache(const FComponentInstanceDataCache &)=delete
FComponentInstanceDataCache & operator=(const FComponentInstanceDataCache &)=delete
FComponentInstanceDataCache(FComponentInstanceDataCache &&)=default
~FComponentInstanceDataCache()=default
FComponentInstanceDataCache & operator=(FComponentInstanceDataCache &&)=default
bool HasInstanceData() const
Definition ComponentInstanceDataCache.h:244
Definition ComponentInstanceDataCache.cpp:205
Definition ComponentInstanceDataCache.cpp:17
Definition NameTypes.h:617
Definition UnrealType.h:3087
Definition UObjectGlobals.h:2492
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition ContainerAllocationPolicies.h:894
Definition StructOnScope.h:142
Definition SubclassOf.h:30
Definition ActorComponent.h:152
Definition Class.h:3793
FORCEINLINE UClass * GetClass() const
Definition UObjectBase.h:217
Definition Object.h:95
Definition ComponentInstanceDataCache.h:149
virtual void FindAndReplaceInstances(const TMap< UObject *, UObject * > &OldToNewInstanceMap)
Definition ComponentInstanceDataCache.h:165
virtual bool ContainsData() const
Definition ComponentInstanceDataCache.h:159
const UClass * GetComponentClass() const
Definition ComponentInstanceDataCache.h:169
const UObject * GetComponentTemplate() const
Definition ComponentInstanceDataCache.h:171
Definition ComponentInstanceDataCache.h:117
Definition ComponentInstanceDataCache.h:192
bool HasInstanceData() const
Definition ComponentInstanceDataCache.h:200
FActorInstanceData()=default
Definition ComponentInstanceDataCache.h:42
UObject * DuplicatedObject
Definition ComponentInstanceDataCache.h:50
int32 ObjectPathDepth
Definition ComponentInstanceDataCache.h:53
Definition ComponentInstanceDataCache.h:69
const TArray< TObjectPtr< UObject > > & GetReferencedObjects() const
Definition ComponentInstanceDataCache.h:84
const TArray< uint8 > & GetSavedProperties() const
Definition ComponentInstanceDataCache.h:85
const TArray< FDataCacheDuplicatedObjectData > & GetDuplicatedObjects() const
Definition ComponentInstanceDataCache.h:83
Definition ObjectPtr.h:488
Definition StructOpsTypeTraits.h:11
@ WithSerializer
Definition StructOpsTypeTraits.h:23
Definition StructOpsTypeTraits.h:46