UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SoftObjectPtr.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 SoftObjectPtr.h: Pointer to UObject asset, keeps extra information so that it is works even if the asset is not in memory
5=============================================================================*/
6
7#pragma once
8
9#include "UObject/Object.h"
10#include "Templates/Casts.h"
13#include "Templates/Models.h"
15
16#include <type_traits>
17
18#ifndef UE_DEPRECATE_SOFTOBJECTPTR_CONVERSIONS
19 #define UE_DEPRECATE_SOFTOBJECTPTR_CONVERSIONS 1
20#endif
21#if UE_DEPRECATE_SOFTOBJECTPTR_CONVERSIONS
22 #define UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(Version, Message) UE_DEPRECATED(Version, Message)
23#else
24 #define UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(Version, Message)
25#endif
26
31template<typename T>
33{
34 enum { Value = false };
35};
36
44struct FSoftObjectPtr : public TPersistentObjectPtr<FSoftObjectPath>
45{
46private:
48
49public:
56
61
70 template <typename T>
73 {
74 // This needs to be a template instead of TObjectPtr<const UObject> because C++ does derived-to-base
75 // pointer conversions ('standard conversion sequences') in situations that TSmartPtr<Derived>-to-TSmartPtr<Base>
76 // conversions ('user-defined conversions') doesn't, meaning it won't auto-convert in many real use cases.
77 //
78 // https://en.cppreference.com/w/cpp/language/implicit_conversion
79 }
80
83 {
84 UObject* Asset = Get();
85 if (Asset == nullptr && !IsNull())
86 {
88
89 // TryLoad will have loaded this pointer if it is valid
90 Asset = Get();
91 }
92 return Asset;
93 }
94
100
103 {
104 return ToSoftObjectPath().ToString();
105 }
106
112
118
121 {
123 }
124
125#if WITH_EDITOR
127 [[nodiscard]] inline UObject* Get() const
128 {
130 {
131 // Cannot use or set the cached value in PIE as it may affect other PIE instances or the editor
133 // If this object is pending kill or otherwise invalid, this will return nullptr just like TPersistentObjectPtr<FSoftObjectPath>::Get()
134 return Result.Get();
135 }
136 return Super::Get();
137 }
138#endif
139
140 // Implicit conversion from UObject* via assignment shouldn't really be allowed if the constructor is explicit
141 using TPersistentObjectPtr<FSoftObjectPath>::operator=;
143 {
144 Super* SuperThis = this;
145 (*SuperThis) = Ptr;
146 return *this;
147 }
149 {
150 return *this = FObjectPtr(const_cast<UObject*>(Ptr));
151 }
152 template <typename T>
154 {
155 // This needs to be a template instead of TObjectPtr<const UObject> because C++ does derived-to-base
156 // pointer conversions ('standard conversion sequences') in situations that TSmartPtr<Derived>-to-TSmartPtr<Base>
157 // conversions ('user-defined conversions') doesn't, meaning it won't auto-convert in many real use cases.
158 //
159 // https://en.cppreference.com/w/cpp/language/implicit_conversion
160
161 return *this = FObjectPtr(Ptr);
162 }
163};
164
167template <> struct TIsSoftObjectPointerType<FSoftObjectPtr> { enum { Value = true }; };
168
172template<class T=UObject>
174{
175 template <class U>
176 friend struct TSoftObjectPtr;
177
178public:
179 using ElementType = T;
180
187
189 template <
190 class U
191 UE_REQUIRES(std::is_convertible_v<U*, T*>)
192 >
194 : SoftObjectPtr(Other.SoftObjectPtr)
195 {
196 }
197 template <
198 class U
199 UE_REQUIRES(!std::is_convertible_v<U*, T*>)
200 >
201 UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Constructing TSoftObjectPtr from an incompatible pointer type has been deprecated.")
203 : SoftObjectPtr(Other.SoftObjectPtr)
204 {
205 }
206
208 template <
209 class U
210 UE_REQUIRES(std::is_convertible_v<U*, T*>)
211 >
213 : SoftObjectPtr(MoveTemp(Other.SoftObjectPtr))
214 {
215 }
216 template <
217 class U
218 UE_REQUIRES(!std::is_convertible_v<U*, T*>)
219 >
220 UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Constructing TSoftObjectPtr from an incompatible pointer type has been deprecated.")
222 : SoftObjectPtr(MoveTemp(Other.SoftObjectPtr))
223 {
224 }
225
227 template <
228 typename U
229 UE_REQUIRES(std::is_convertible_v<U*, T*>)
230 >
232 : SoftObjectPtr(Object)
233 {
234 }
235 template <
236 typename U
237 UE_REQUIRES(!std::is_convertible_v<U*, T*>)
238 >
239 UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Constructing TSoftObjectPtr from an incompatible pointer type has been deprecated.")
241 : SoftObjectPtr(Object)
242 {
243 }
244
245#if UE_ENABLE_NOTNULL_WRAPPER
247 template <
248 typename U
249 UE_REQUIRES(std::is_convertible_v<U*, T*>)
250 >
252 : SoftObjectPtr(Object)
253 {
254 }
256 template <
257 typename U
258 UE_REQUIRES(std::is_convertible_v<U*, T*>)
259 >
261 : SoftObjectPtr(static_cast<TObjectPtr<U>>(Object).Get())
262 {
263 }
264#endif
265
267 template <
268 typename U
269 UE_REQUIRES(std::is_convertible_v<U*, T*>)
270 >
272 : SoftObjectPtr(Object.Get())
273 {
274 }
275 template <
276 typename U
277 UE_REQUIRES(!std::is_convertible_v<U*, T*>)
278 >
279 UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Constructing TSoftObjectPtr from an incompatible pointer type has been deprecated.")
281 : SoftObjectPtr(Object.Get())
282 {
283 }
284
287 : SoftObjectPtr(nullptr)
288 {
289 }
290
292 template <
293 typename SoftObjectPathType
294 UE_REQUIRES(std::is_same_v<SoftObjectPathType, FSoftObjectPath>)
295 >
297 : SoftObjectPtr(MoveTemp(ObjectPath))
298 {
299 // The reason for the strange templated/constrained signature is to prevent this type hole:
300 //
301 // const UThing* ConstPtr = ...;
302 // TSoftObjectPtr<UThing*> NonConstSoftPtr(ConstPtr); // implicitly constructs an FSoftObjectPath from ConstPtr, then explicitly constructs the TSoftObjectPtr from that
303 //
304 // The real fix is to make the FSoftObjectPath(const UObject*) constructor explicit, but that will involve substantially more changes.
305 }
306 UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Constructing TSoftObjectPtr from an FString has been deprecated - instead, explicitly construct a FSoftObjectPath.")
307 [[nodiscard]] explicit TSoftObjectPtr(const FString& Path)
308 : SoftObjectPtr(FSoftObjectPath(Path))
309 {
310 }
311
314 {
315 SoftObjectPtr.Reset();
316 }
317
320 {
321 SoftObjectPtr.ResetWeakPtr();
322 }
323
325 template <
326 typename U
327 UE_REQUIRES(std::is_convertible_v<U*, T*>)
328 >
330 {
331 SoftObjectPtr = Object;
332 return *this;
333 }
334 template <
335 typename U
336 UE_REQUIRES(!std::is_convertible_v<U*, T*>)
337 >
338 UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Assigning TSoftObjectPtr from an incompatible pointer type has been deprecated.")
340 {
341 SoftObjectPtr = Object;
342 return *this;
343 }
344
345#if UE_ENABLE_NOTNULL_WRAPPER
347 template <
348 typename U
349 UE_REQUIRES(std::is_convertible_v<U*, T*>)
350 >
352 {
353 SoftObjectPtr = Object;
354 return *this;
355 }
357 template <
358 typename U
359 UE_REQUIRES(std::is_convertible_v<U*, T*>)
360 >
362 {
363 SoftObjectPtr = static_cast<TObjectPtr<U>>(Object).Get();
364 return *this;
365 }
366#endif
367
369 template <
370 typename U
371 UE_REQUIRES(std::is_convertible_v<U*, T*>)
372 >
374 {
375 SoftObjectPtr = Object.Get();
376 return *this;
377 }
378 template <
379 typename U
380 UE_REQUIRES(!std::is_convertible_v<U*, T*>)
381 >
382 UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Assigning TSoftObjectPtr from an incompatible pointer type has been deprecated.")
384 {
385 SoftObjectPtr = Object.Get();
386 return *this;
387 }
388
391 {
392 SoftObjectPtr = nullptr;
393 return *this;
394 }
395
398 {
399 SoftObjectPtr = MoveTemp(ObjectPath);
400 return *this;
401 }
402
404 template <
405 class U
406 UE_REQUIRES(std::is_convertible_v<U*, T*>)
407 >
409 {
410 SoftObjectPtr = Other;
411 return *this;
412 }
413 template <
414 class U
415 UE_REQUIRES(!std::is_convertible_v<U*, T*>)
416 >
417 UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Assigning TSoftObjectPtr from an incompatible pointer type has been deprecated.")
419 {
420 SoftObjectPtr = Other;
421 return *this;
422 }
423
425 template <
426 class U
427 UE_REQUIRES(std::is_convertible_v<U*, T*>)
428 >
430 {
431 SoftObjectPtr = MoveTemp(Other.SoftObjectPtr);
432 return *this;
433 }
434 template <
435 class U
436 UE_REQUIRES(!std::is_convertible_v<U*, T*>)
437 >
438 UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Assigning TSoftObjectPtr from an incompatible pointer type has been deprecated.")
440 {
441 SoftObjectPtr = MoveTemp(Other.SoftObjectPtr);
442 return *this;
443 }
444
452 {
453 return SoftObjectPtr == Rhs.SoftObjectPtr;
454 }
455 template <
456 typename U
458 >
460 {
461 return SoftObjectPtr == Rhs.SoftObjectPtr;
462 }
463 template <
464 typename U
466 >
467 UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Comparing TSoftObjectPtrs of incompatible pointer types has been deprecated.")
469 {
470 return SoftObjectPtr == Rhs.SoftObjectPtr;
471 }
472 template <
473 typename U
475 >
477 {
478 return SoftObjectPtr == TSoftObjectPtr<U>(Rhs).SoftObjectPtr;
479 }
480 template <
481 typename U
483 >
484 UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Comparing TSoftObjectPtrs of incompatible pointer types has been deprecated.")
486 {
487 return SoftObjectPtr == TSoftObjectPtr<U>(Rhs).SoftObjectPtr;
488 }
490 {
491 return SoftObjectPtr == nullptr;
492 }
493
499 [[nodiscard]] T* Get() const;
500
503 {
504 return *Get();
505 }
506
509 {
510 return Get();
511 }
512
515 {
516 UObject* Asset = SoftObjectPtr.LoadSynchronous();
517 return Cast<T>(Asset);
518 }
519
532
539 {
540 // This does the runtime type check
541 return Get() != nullptr;
542 }
543
550 {
551 return SoftObjectPtr.IsPending();
552 }
553
560 {
561 return SoftObjectPtr.IsNull();
562 }
563
566 {
567 return SoftObjectPtr.GetUniqueID();
568 }
569
572 {
573 return SoftObjectPtr.GetUniqueID();
574 }
575
578 {
579 return ToSoftObjectPath().ToString();
580 }
581
587
593
596 {
598 }
599
601 [[nodiscard]] UE_FORCEINLINE_HINT explicit operator bool() const
602 {
603 return IsValid();
604 }
605
608 {
609 return GetTypeHash(static_cast<const TPersistentObjectPtr<FSoftObjectPath>&>(SoftObjectPtr));
610 }
611
613 {
614 Ar << SoftObjectPtr;
615 }
616
617private:
618 FSoftObjectPtr SoftObjectPtr;
619};
620
621template <typename T>
623
624#if !PLATFORM_COMPILER_HAS_GENERATED_COMPARISON_OPERATORS
625template <
626 typename LhsType,
627 typename RhsType
629>
631{
632 return Rhs == Lhs;
633}
634template <
635 typename LhsType,
636 typename RhsType
638>
639UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Comparing TSoftObjectPtrs of incompatible pointer types has been deprecated.")
641{
642 return Rhs == Lhs;
643}
644template <typename RhsType>
646{
647 return Rhs == Lhs;
648}
649template <
650 typename LhsType,
651 typename RhsType
653>
655{
656 return !(Lhs == Rhs);
657}
658template <
659 typename LhsType,
660 typename RhsType
662>
663UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Comparing TSoftObjectPtrs of incompatible pointer types has been deprecated.")
665{
666 return !(Lhs == Rhs);
667}
668template <
669 typename LhsType,
670 typename RhsType
672>
674{
675 return !(Lhs == Rhs);
676}
677template <
678 typename LhsType,
679 typename RhsType
681>
682UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Comparing TSoftObjectPtrs of incompatible pointer types has been deprecated.")
684{
685 return !(Lhs == Rhs);
686}
687template <typename LhsType>
689{
690 return !(Lhs == Rhs);
691}
692template <
693 typename LhsType,
694 typename RhsType
696>
698{
699 return !(Lhs == Rhs);
700}
701template <
702 typename LhsType,
703 typename RhsType
705>
706UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(5.5, "Comparing TSoftObjectPtrs of incompatible pointer types has been deprecated.")
708{
709 return !(Lhs == Rhs);
710}
711template <typename RhsType>
713{
714 return !(Lhs == Rhs);
715}
716#endif
717
719template<class T>
724
725template<class T>
727{
728 Ptr.Serialize(Ar);
729 return Ar;
730}
731
732
733template<class T> struct TIsPODType<TSoftObjectPtr<T> > { enum { Value = TIsPODType<FSoftObjectPtr>::Value }; };
736
737template <typename T>
738struct TCallTraits<TSoftObjectPtr<T>> : public TCallTraitsBase<TSoftObjectPtr<T>>
739{
741};
742
744template <class T>
746{
747 static_assert(std::is_base_of_v<UObject, T>, "Type must derive from UObject");
749}
750
751template <class T>
753{
754 static_assert(std::is_base_of_v<UObject, T>, "Type must derive from UObject");
756}
757
761template<class TClass=UObject>
763{
764 template <class TClassA>
765 friend class TSoftClassPtr;
766
767public:
769
776
778 template <
779 class TClassA
780 UE_REQUIRES(std::is_convertible_v<TClassA*, TClass*>)
781 >
783 : SoftObjectPtr(Other.SoftObjectPtr)
784 {
785 }
786
789 : SoftObjectPtr(From)
790 {
791 }
792
795 : SoftObjectPtr(ObjectPath)
796 {
797 }
798
801 {
802 SoftObjectPtr.Reset();
803 }
804
807 {
808 SoftObjectPtr.ResetWeakPtr();
809 }
810
813 {
814 SoftObjectPtr = From;
815 }
816
819 {
820 SoftObjectPtr = ObjectPath;
821 }
822
824 template <
825 class TClassA
826 UE_REQUIRES(std::is_convertible_v<TClassA*, TClass*>)
827 >
829 {
830 SoftObjectPtr = Other;
831 return *this;
832 }
833
835 template <
836 class TClassA
837 UE_REQUIRES(std::is_convertible_v<TClassA*, TClass*>)
838 >
840 {
841 SoftObjectPtr = Other.SoftObjectPtr;
842 return *this;
843 }
844
852 {
853 return SoftObjectPtr == Other.SoftObjectPtr;
854 }
855#if !PLATFORM_COMPILER_HAS_GENERATED_COMPARISON_OPERATORS
863 {
864 return SoftObjectPtr != Other.SoftObjectPtr;
865 }
866#endif
867
873 [[nodiscard]] inline UClass* Get() const
874 {
875 UClass* Class = dynamic_cast<UClass*>(SoftObjectPtr.Get());
876 if (!Class || !Class->IsChildOf(TClass::StaticClass()))
877 {
878 return nullptr;
879 }
880 return Class;
881 }
882
885 {
886 return *Get();
887 }
888
891 {
892 return Get();
893 }
894
901 {
902 // This also does the UClass type check
903 return Get() != nullptr;
904 }
905
912 {
913 return SoftObjectPtr.IsPending();
914 }
915
922 {
923 return SoftObjectPtr.IsNull();
924 }
925
928 {
929 return SoftObjectPtr.GetUniqueID();
930 }
931
934 {
935 return SoftObjectPtr.GetUniqueID();
936 }
937
940 {
941 return ToSoftObjectPath().ToString();
942 }
943
949
955
958 {
960 }
961
963 [[nodiscard]] UE_FORCEINLINE_HINT explicit operator bool() const
964 {
965 return IsValid();
966 }
967
970 {
971 return GetTypeHash(static_cast<const TPersistentObjectPtr<FSoftObjectPath>&>(SoftObjectPtr));
972 }
973
976 {
977 UObject* Asset = SoftObjectPtr.LoadSynchronous();
978 UClass* Class = dynamic_cast<UClass*>(Asset);
979 if (!Class || !Class->IsChildOf(TClass::StaticClass()))
980 {
981 return nullptr;
982 }
983 return Class;
984 }
985
998
999 inline void Serialize(FArchive& Ar)
1000 {
1002 }
1003
1004private:
1005 FSoftObjectPtr SoftObjectPtr;
1006};
1007
1008template <class T> struct TIsPODType<TSoftClassPtr<T> > { enum { Value = TIsPODType<FSoftObjectPtr>::Value }; };
1010
1011template <typename T>
1012struct TCallTraits<TSoftClassPtr<T>> : public TCallTraitsBase<TSoftClassPtr<T>>
1013{
1015};
1016
1018template <class T>
1020{
1021 static_assert(std::is_base_of_v<UClass, T>, "Type must derive from UClass");
1023}
1024
1025template <class T>
1027{
1028 static_assert(std::is_base_of_v<UClass, T>, "Type must derive from UClass");
1030}
1031
1034{
1035 template <typename SoftObjectPtrType>
1036 bool operator()(const SoftObjectPtrType& Lhs, const SoftObjectPtrType& Rhs) const
1037 {
1038 return FSoftObjectPathFastLess::operator()(Lhs.ToSoftObjectPath(), Rhs.ToSoftObjectPath());
1039 }
1040};
1041
1044{
1045 template <typename SoftObjectPtrType>
1046 bool operator()(const SoftObjectPtrType& Lhs, const SoftObjectPtrType& Rhs) const
1047 {
1048 return FSoftObjectPathLexicalLess::operator()(Lhs.ToSoftObjectPath(), Rhs.ToSoftObjectPath());
1049 }
1050};
1051
1053template<class T>
1055{
1056 return dynamic_cast<T*>(SoftObjectPtr.Get());
1057}
1058
1059#if !PLATFORM_COMPILER_HAS_GENERATED_COMPARISON_OPERATORS
1060template<class TClass>
1062{
1063 return Rhs == Lhs;
1064}
1065
1066template<class TClass>
1068{
1069 return Rhs != Lhs;
1070}
1071#endif
1072
1074template<class TClass>
1079
1080template<class TClass>
1082{
1083 Ptr.Serialize(Ar);
1084 return Ar;
1085}
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::TYPE_OF_NULLPTR TYPE_OF_NULLPTR
The type of the C++ nullptr keyword.
Definition Platform.h:1157
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
T * ToRawPtr(const TObjectPtr< T > &Ptr)
Definition ObjectPtr.h:1000
T TNotNull
Definition NotNull.h:307
const bool
Definition NetworkReplayStreaming.h:178
#define UE_REQUIRES(...)
Definition Requires.h:86
FArchive & operator<<(FArchive &Ar, TSoftObjectPtr< T > &Ptr)
Definition SoftObjectPtr.h:726
TSoftClassPtr< std::remove_cv_t< T > > MakeSoftClassPtr(T *Object)
Definition SoftObjectPtr.h:1019
UE_FORCEINLINE_HINT uint32 GetTypeHash(const TSoftObjectPtr< T > &Ptr)
Definition SoftObjectPtr.h:720
#define UE_SOFTOBJECTPTR_CONVERSION_DEPRECATED(Version, Message)
Definition SoftObjectPtr.h:22
UE_FORCEINLINE_HINT bool operator!=(const TSoftObjectPtr< LhsType > &Lhs, const TSoftObjectPtr< RhsType > &Rhs)
Definition SoftObjectPtr.h:654
TSoftObjectPtr< T > MakeSoftObjectPtr(T *Object)
Definition SoftObjectPtr.h:745
UE_FORCEINLINE_HINT bool operator==(LhsType *Lhs, const TSoftObjectPtr< RhsType > &Rhs)
Definition SoftObjectPtr.h:630
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition NameTypes.h:617
Definition SoftObjectPtr.h:763
UE_FORCEINLINE_HINT TSoftClassPtr & operator=(const TSoftClassPtr &Other)=default
TClass ElementType
Definition SoftObjectPtr.h:768
UE_FORCEINLINE_HINT TSoftClassPtr(TSoftClassPtr &&Other)=default
TSoftClassPtr & operator=(const TSoftObjectPtr< TClassA > &Other)
Definition SoftObjectPtr.h:839
UE_FORCEINLINE_HINT bool IsPending() const
Definition SoftObjectPtr.h:911
void Serialize(FArchive &Ar)
Definition SoftObjectPtr.h:999
UE_FORCEINLINE_HINT void operator=(const FSoftObjectPath &ObjectPath)
Definition SoftObjectPtr.h:818
UE_FORCEINLINE_HINT bool operator==(const TSoftClassPtr &Other) const
Definition SoftObjectPtr.h:851
UE_FORCEINLINE_HINT TSoftClassPtr(const TSoftClassPtr< TClassA > &Other)
Definition SoftObjectPtr.h:782
int32 LoadAsync(FLoadSoftObjectPathAsyncDelegate InCompletionDelegate, FLoadAssetAsyncOptionalParams InOptionalParams=FLoadAssetAsyncOptionalParams()) const
Definition SoftObjectPtr.h:994
UE_FORCEINLINE_HINT void operator=(const UClass *From)
Definition SoftObjectPtr.h:812
UE_FORCEINLINE_HINT const FSoftObjectPath & ToSoftObjectPath() const
Definition SoftObjectPtr.h:933
UE_FORCEINLINE_HINT bool IsValid() const
Definition SoftObjectPtr.h:900
UE_FORCEINLINE_HINT FString GetLongPackageName() const
Definition SoftObjectPtr.h:945
UE_FORCEINLINE_HINT ~TSoftClassPtr()=default
TSoftClassPtr & operator=(const TWeakObjectPtr< TClassA > &Other)
Definition SoftObjectPtr.h:828
UE_FORCEINLINE_HINT TSoftClassPtr(const UClass *From)
Definition SoftObjectPtr.h:788
UE_FORCEINLINE_HINT FName GetLongPackageFName() const
Definition SoftObjectPtr.h:951
UClass * LoadSynchronous() const
Definition SoftObjectPtr.h:975
UE_FORCEINLINE_HINT TSoftClassPtr()=default
UE_FORCEINLINE_HINT void ResetWeakPtr()
Definition SoftObjectPtr.h:806
UE_FORCEINLINE_HINT UClass * operator->() const
Definition SoftObjectPtr.h:890
UE_FORCEINLINE_HINT const FSoftObjectPath & GetUniqueID() const
Definition SoftObjectPtr.h:927
UE_FORCEINLINE_HINT FString ToString() const
Definition SoftObjectPtr.h:939
UE_FORCEINLINE_HINT bool IsNull() const
Definition SoftObjectPtr.h:921
UE_FORCEINLINE_HINT void Reset()
Definition SoftObjectPtr.h:800
UE_FORCEINLINE_HINT TSoftClassPtr(const TSoftClassPtr &Other)=default
UE_FORCEINLINE_HINT TSoftClassPtr(const FSoftObjectPath &ObjectPath)
Definition SoftObjectPtr.h:794
UE_FORCEINLINE_HINT FString GetAssetName() const
Definition SoftObjectPtr.h:957
UClass * Get() const
Definition SoftObjectPtr.h:873
UE_FORCEINLINE_HINT bool operator!=(const TSoftClassPtr &Other) const
Definition SoftObjectPtr.h:862
UE_FORCEINLINE_HINT uint32 GetPtrTypeHash() const
Definition SoftObjectPtr.h:969
UE_FORCEINLINE_HINT UClass & operator*() const
Definition SoftObjectPtr.h:884
UE_FORCEINLINE_HINT TSoftClassPtr & operator=(TSoftClassPtr &&Other)=default
Definition Class.h:3793
Definition Object.h:95
FORCEINLINE UE_STRING_CLASS RhsType && Rhs
Definition String.cpp.inl:718
int32 GetPlayInEditorID()
Definition CoreGlobals.cpp:877
Definition ObjectPtr.h:55
Definition SoftObjectPath.h:507
bool operator()(const FSoftObjectPath &Lhs, const FSoftObjectPath &Rhs) const
Definition SoftObjectPath.h:508
Definition SoftObjectPath.h:516
bool operator()(const FSoftObjectPath &Lhs, const FSoftObjectPath &Rhs) const
Definition SoftObjectPath.h:517
Definition SoftObjectPath.h:56
FName GetLongPackageFName() const
Definition SoftObjectPath.h:267
COREUOBJECT_API int32 LoadAsync(FLoadSoftObjectPathAsyncDelegate InCompletionDelegate, FLoadAssetAsyncOptionalParams InOptionalParams=FLoadAssetAsyncOptionalParams()) const
Definition SoftObjectPath.cpp:840
COREUOBJECT_API UObject * ResolveObject() const
Definition SoftObjectPath.cpp:874
COREUOBJECT_API UObject * TryLoad(FUObjectSerializeContext *InLoadContext=nullptr) const
Definition SoftObjectPath.cpp:781
FString GetAssetName() const
Definition SoftObjectPath.h:273
COREUOBJECT_API FString ToString() const
Definition SoftObjectPath.cpp:97
FString GetLongPackageName() const
Definition SoftObjectPath.h:260
Definition SoftObjectPtr.h:1034
bool operator()(const SoftObjectPtrType &Lhs, const SoftObjectPtrType &Rhs) const
Definition SoftObjectPtr.h:1036
Definition SoftObjectPtr.h:1044
bool operator()(const SoftObjectPtrType &Lhs, const SoftObjectPtrType &Rhs) const
Definition SoftObjectPtr.h:1046
Definition SoftObjectPtr.h:45
UE_FORCEINLINE_HINT FString GetAssetName() const
Definition SoftObjectPtr.h:120
FSoftObjectPtr & operator=(FObjectPtr Ptr)
Definition SoftObjectPtr.h:142
UE_FORCEINLINE_HINT FName GetLongPackageFName() const
Definition SoftObjectPtr.h:114
UE_FORCEINLINE_HINT const FSoftObjectPath & ToSoftObjectPath() const
Definition SoftObjectPtr.h:96
UE_FORCEINLINE_HINT FSoftObjectPtr(const UObject *Object)
Definition SoftObjectPtr.h:66
UE_FORCEINLINE_HINT FSoftObjectPtr & operator=(const FSoftObjectPtr &Other)=default
UE_FORCEINLINE_HINT FSoftObjectPtr & operator=(const UObject *Ptr)
Definition SoftObjectPtr.h:148
UE_FORCEINLINE_HINT FSoftObjectPtr & operator=(FSoftObjectPtr &&Other)=default
UE_FORCEINLINE_HINT FString GetLongPackageName() const
Definition SoftObjectPtr.h:108
UE_FORCEINLINE_HINT FSoftObjectPtr(TObjectPtr< T > Object)
Definition SoftObjectPtr.h:71
UE_FORCEINLINE_HINT FSoftObjectPtr(const FSoftObjectPath &ObjectPath)
Definition SoftObjectPtr.h:57
UE_FORCEINLINE_HINT FSoftObjectPtr(FSoftObjectPtr &&Other)=default
UE_FORCEINLINE_HINT ~FSoftObjectPtr()=default
UE_FORCEINLINE_HINT FSoftObjectPtr & operator=(TObjectPtr< T > Ptr)
Definition SoftObjectPtr.h:153
UE_FORCEINLINE_HINT FSoftObjectPtr()=default
UE_FORCEINLINE_HINT FString ToString() const
Definition SoftObjectPtr.h:102
UE_FORCEINLINE_HINT FSoftObjectPtr(const FSoftObjectPtr &Other)=default
UE_FORCEINLINE_HINT FSoftObjectPtr(FObjectPtr Object)
Definition SoftObjectPtr.h:62
UObject * LoadSynchronous() const
Definition SoftObjectPtr.h:82
Definition UnrealTypeTraits.h:267
Definition UnrealTypeTraits.h:283
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13
Definition SoftObjectPtr.h:33
@ Value
Definition SoftObjectPtr.h:34
Definition UnrealTypeTraits.h:181
@ Value
Definition UnrealTypeTraits.h:182
Definition ObjectPtr.h:488
Definition PersistentObjectPtr.h:19
UE_FORCEINLINE_HINT bool IsPending() const
Definition PersistentObjectPtr.h:218
UObject * Get() const
Definition PersistentObjectPtr.h:120
UE_FORCEINLINE_HINT const FSoftObjectPath & GetUniqueID() const
Definition PersistentObjectPtr.h:104
UE_FORCEINLINE_HINT bool IsNull() const
Definition PersistentObjectPtr.h:247
void Reset()
Definition PersistentObjectPtr.h:29
UE_FORCEINLINE_HINT void ResetWeakPtr()
Definition PersistentObjectPtr.h:36
Definition SoftObjectPtr.h:174
UE_FORCEINLINE_HINT uint32 GetPtrTypeHash() const
Definition SoftObjectPtr.h:607
friend struct TSoftObjectPtr
Definition SoftObjectPtr.h:176
UE_FORCEINLINE_HINT void ResetWeakPtr()
Definition SoftObjectPtr.h:319
T ElementType
Definition SoftObjectPtr.h:179
UE_FORCEINLINE_HINT void Serialize(FArchive &Ar)
Definition SoftObjectPtr.h:612
T * Get() const
Definition SoftObjectPtr.h:1054
UE_FORCEINLINE_HINT bool IsNull() const
Definition SoftObjectPtr.h:559
UE_FORCEINLINE_HINT TSoftObjectPtr(const TSoftObjectPtr &Other)=default
UE_FORCEINLINE_HINT bool IsPending() const
Definition SoftObjectPtr.h:549
T * LoadSynchronous() const
Definition SoftObjectPtr.h:514
UE_FORCEINLINE_HINT TSoftObjectPtr(U *Object)
Definition SoftObjectPtr.h:231
UE_FORCEINLINE_HINT TSoftObjectPtr(TSoftObjectPtr &&Other)=default
TSoftObjectPtr(const FString &Path)
Definition SoftObjectPtr.h:307
UE_FORCEINLINE_HINT TSoftObjectPtr(TSoftObjectPtr< U > &&Other)
Definition SoftObjectPtr.h:212
int32 LoadAsync(FLoadSoftObjectPathAsyncDelegate InCompletionDelegate, FLoadAssetAsyncOptionalParams InOptionalParams=FLoadAssetAsyncOptionalParams()) const
Definition SoftObjectPtr.h:528
UE_FORCEINLINE_HINT TSoftObjectPtr(const TSoftObjectPtr< U > &Other)
Definition SoftObjectPtr.h:193
UE_FORCEINLINE_HINT bool operator==(const TSoftObjectPtr &Rhs) const
Definition SoftObjectPtr.h:451
UE_FORCEINLINE_HINT FString ToString() const
Definition SoftObjectPtr.h:577
UE_FORCEINLINE_HINT bool operator==(const TSoftObjectPtr< U > &Rhs) const
Definition SoftObjectPtr.h:459
UE_FORCEINLINE_HINT const FSoftObjectPath & GetUniqueID() const
Definition SoftObjectPtr.h:565
UE_FORCEINLINE_HINT bool operator==(U *Rhs) const
Definition SoftObjectPtr.h:476
UE_FORCEINLINE_HINT T & operator*() const
Definition SoftObjectPtr.h:502
UE_FORCEINLINE_HINT bool operator==(TYPE_OF_NULLPTR) const
Definition SoftObjectPtr.h:489
UE_FORCEINLINE_HINT ~TSoftObjectPtr()=default
UE_FORCEINLINE_HINT FString GetLongPackageName() const
Definition SoftObjectPtr.h:583
UE_FORCEINLINE_HINT TSoftObjectPtr(SoftObjectPathType ObjectPath)
Definition SoftObjectPtr.h:296
UE_FORCEINLINE_HINT TSoftObjectPtr(const TObjectPtr< U > Object)
Definition SoftObjectPtr.h:271
TSoftObjectPtr & operator=(const TObjectPtr< U > Object)
Definition SoftObjectPtr.h:373
UE_FORCEINLINE_HINT FString GetAssetName() const
Definition SoftObjectPtr.h:595
UE_FORCEINLINE_HINT T * operator->() const
Definition SoftObjectPtr.h:508
UE_FORCEINLINE_HINT TSoftObjectPtr & operator=(TSoftObjectPtr &&Other)=default
UE_FORCEINLINE_HINT void Reset()
Definition SoftObjectPtr.h:313
UE_FORCEINLINE_HINT TSoftObjectPtr()=default
UE_FORCEINLINE_HINT const FSoftObjectPath & ToSoftObjectPath() const
Definition SoftObjectPtr.h:571
TSoftObjectPtr & operator=(TYPE_OF_NULLPTR)
Definition SoftObjectPtr.h:390
TSoftObjectPtr & operator=(TSoftObjectPtr< U > Other)
Definition SoftObjectPtr.h:429
UE_FORCEINLINE_HINT TSoftObjectPtr & operator=(const TSoftObjectPtr &Other)=default
UE_FORCEINLINE_HINT FName GetLongPackageFName() const
Definition SoftObjectPtr.h:589
UE_FORCEINLINE_HINT bool IsValid() const
Definition SoftObjectPtr.h:538
TSoftObjectPtr & operator=(const TWeakObjectPtr< U > &Other)
Definition SoftObjectPtr.h:408
UE_FORCEINLINE_HINT TSoftObjectPtr(TYPE_OF_NULLPTR)
Definition SoftObjectPtr.h:286
TSoftObjectPtr & operator=(FSoftObjectPath ObjectPath)
Definition SoftObjectPtr.h:397
TSoftObjectPtr & operator=(U *Object)
Definition SoftObjectPtr.h:329
Definition WeakObjectPtrTemplates.h:25