Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
UDataAssetManager 클래스 참조

#include <DataAssetManager.h>

UDataAssetManager에 대한 상속 다이어그램 :
Inheritance graph
UDataAssetManager에 대한 협력 다이어그램:
Collaboration graph

Public 멤버 함수

 UDataAssetManager ()
 
template<typename AssetType >
AssetType * GetAsset (const TSoftObjectPtr< AssetType > &AssetPointer, bool bKeepInMemory)
 
template<typename AssetType >
TSubclassOf< AssetType > GetSubclass (const TSoftClassPtr< AssetType > &AssetPointer, bool bKeepInMemory)
 
template<typename GameDataClass >
const GameDataClass & GetOrLoadTypedGameData (const TSoftObjectPtr< GameDataClass > &DataPath)
 
template<typename GameDataClass >
TArray< const GameDataClass * > GetAllTypedGameData () const
 

정적 Public 멤버 함수

static UDataAssetManagerGetInstance ()
 UDataAssetManager 싱글턴 인스턴스를 반환합니다.
 
static void DumpLoadedAssets ()
 현재 GC 방지 풀에 등록된 모든 에셋 정보를 로그로 출력합니다.
 
static void RegisterBundleAssets (const TArray< UObject * > &InAssets)
 번들 로드 완료 후 에셋들을 GC 방지 풀에 등록합니다.
 
static void UnregisterBundleAssets (const TArray< UObject * > &InAssets)
 번들 언로드 시 GC 방지 풀에서 에셋들을 제거합니다.
 
template<typename TData >
static TData * GetAsset (const TSoftObjectPtr< TData > &AssetPointer, bool bKeepInMemory=true)
 
template<typename TData >
static TSubclassOf< TData > GetSubclass (const TSoftClassPtr< TData > &AssetPointer, bool bKeepInMemory=true)
 
static void LoadAsyncByPath (const FSoftObjectPath &AssetPath, FAsyncLoadCompletedDelegate CompletedDelegate=FAsyncLoadCompletedDelegate())
 소프트 오브젝트 경로로 에셋을 비동기 로드합니다.
 
static void LoadAsyncByName (const FName &AssetName, FAsyncLoadCompletedDelegate CompletedDelegate=FAsyncLoadCompletedDelegate())
 Primary Asset 이름으로 에셋을 비동기 로드합니다.
 

Protected 멤버 함수

template<typename TData >
const TData & GetOrLoadTypedGameData (const TSoftObjectPtr< TData > &DataPath)
 
template<typename TData >
TArray< const TData * > GetAllTypedGameData () const
 
void InitializeOnManager ()
 
void OnUpdateLoadPercentage (float Percentage)
 
void OnAllDataLoadCompleted ()
 
virtual void TryCreateLoadJobForDataAsset (TSoftObjectPtr< UPrimaryDataAsset > DataPath, FString JobName)
 
virtual void StartInitialLoading () override
 엔진 시작 시 초기 에셋 로딩을 수행합니다.
 
UPrimaryDataAsset * LoadGameDataOfClass (TSubclassOf< UPrimaryDataAsset > DataClass, const TSoftObjectPtr< UPrimaryDataAsset > &DataClassPath, FPrimaryAssetType PrimaryAssetType)
 지정한 클래스 타입의 게임 데이터 에셋을 동기 로드하고 GameDataMap에 등록합니다.
 

정적 Protected 멤버 함수

static UObject * SynchronousLoadAsset (const FSoftObjectPath &AssetPath)
 소프트 오브젝트 경로로 에셋을 동기 로드합니다.
 
static bool ShouldLogAssetLoads ()
 에셋 로드 로깅 여부를 반환합니다.
 

Protected 속성

TMap< TObjectPtr< UClass >, FGameDataAssetListGameDataMap
 
TArray< TSoftObjectPtr< UPrimaryDataAsset > > InitialGameDataPaths
 
FDataAssetJobManager JobManager
 

Private 속성

TSet< TObjectPtr< UObject > > LoadedAssets
 

생성자 & 소멸자 문서화

◆ UDataAssetManager()

UDataAssetManager::UDataAssetManager ( )
8{ }

멤버 함수 문서화

◆ DumpLoadedAssets()

void UDataAssetManager::DumpLoadedAssets ( )
static

현재 GC 방지 풀에 등록된 모든 에셋 정보를 로그로 출력합니다.

173{
174 LOG_INFO(LogCKAsset, "========== 로드된 에셋 덤프 시작 ==========");
175
176 for (const UObject* LoadedAsset : GetInstance().LoadedAssets)
177 {
178 LOG_INFO(LogCKAsset, " %s", *GetNameSafe(LoadedAsset));
179 }
180
181 int DumpedAssetCount = GetInstance().LoadedAssets.Num();
182
183 if (DumpedAssetCount > 0)
184 {
185 LOG_INFO(LogCKAsset, "Pool에 %d개의 에셋 존재", DumpedAssetCount);
186 }
187 else
188 {
189 LOG_INFO(LogCKAsset, "Pool에 불러올 에셋이 없습니다.");
190 }
191
192 LOG_INFO(LogCKAsset, "========== 로드된 에셋 덤프 완료 ==========");
193}
#define LOG_INFO(Category, Format,...)
Definition CK_UE.h:30
TSet< TObjectPtr< UObject > > LoadedAssets
Definition DataAssetManager.h:118
static UDataAssetManager & GetInstance()
UDataAssetManager 싱글턴 인스턴스를 반환합니다.
Definition DataAssetManager.cpp:22
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetAllTypedGameData() [1/2]

template<typename TData >
TArray< const TData * > UDataAssetManager::GetAllTypedGameData ( ) const
protected

◆ GetAllTypedGameData() [2/2]

template<typename GameDataClass >
TArray< const GameDataClass * > UDataAssetManager::GetAllTypedGameData ( ) const
197{
198 TArray<const GameDataClass*> Result;
199
200 const auto* pResult = GameDataMap.Find(GameDataClass::StaticClass());
201
202 if (pResult == nullptr)
203 {
204 return Result;
205 }
206
207 for (const TObjectPtr<UPrimaryDataAsset>& Asset : pResult->Assets)
208 {
209 if (const GameDataClass* Typed = Cast<GameDataClass>(Asset))
210 {
211 Result.Add(Typed);
212 }
213 }
214
215 return Result;
216}
TMap< TObjectPtr< UClass >, FGameDataAssetList > GameDataMap
Definition DataAssetManager.h:108

◆ GetAsset() [1/2]

template<typename AssetType >
AssetType * UDataAssetManager::GetAsset ( const TSoftObjectPtr< AssetType > &  AssetPointer,
bool  bKeepInMemory 
)
126{
127 AssetType* LoadedAsset = nullptr;
128 const FSoftObjectPath& AssetPath = AssetPointer.ToSoftObjectPath();
129
130 if (AssetPath.IsNull())
131 {
132 return LoadedAsset;
133 }
134
135 LoadedAsset = AssetPointer.Get();
136
137 if (LoadedAsset == nullptr)
138 {
139 LoadedAsset = Cast<AssetType>(SynchronousLoadAsset(AssetPath));
140 ensureAlwaysMsgf(LoadedAsset, TEXT("Failed to load asset [%s]"), *AssetPointer.ToString());
141 }
142
143 if (LoadedAsset && bKeepInMemory)
144 {
145 GetInstance().LoadedAssets.Add(Cast<UObject>(LoadedAsset));
146 }
147
148 return LoadedAsset;
149}
static UObject * SynchronousLoadAsset(const FSoftObjectPath &AssetPath)
소프트 오브젝트 경로로 에셋을 동기 로드합니다.
Definition DataAssetManager.cpp:127
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetAsset() [2/2]

template<typename TData >
static TData * UDataAssetManager::GetAsset ( const TSoftObjectPtr< TData > &  AssetPointer,
bool  bKeepInMemory = true 
)
static

◆ GetInstance()

UDataAssetManager & UDataAssetManager::GetInstance ( )
static

UDataAssetManager 싱글턴 인스턴스를 반환합니다.

GEngine->AssetManager를 UDataAssetManager로 캐스팅하여 반환합니다. DefaultEngine.ini에 AssetManagerClassName이 올바르게 설정되어 있어야 합니다.

반환값
UDataAssetManager 싱글턴 참조
23{
24 check(GEngine);
25
26 UDataAssetManager* Singleton = Cast<UDataAssetManager>(GEngine->AssetManager);
27
28 if (Singleton)
29 {
30 return *Singleton;
31 }
32 else
33 {
34 LOG_ERROR(LogCKAsset, "DefaultEngine.ini에서 AssetManagerClassName이 유효하지 않습니다.");
35 return *NewObject<UDataAssetManager>();
36 }
37}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:32
Definition DataAssetManager.h:34
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetOrLoadTypedGameData() [1/2]

template<typename GameDataClass >
const GameDataClass & UDataAssetManager::GetOrLoadTypedGameData ( const TSoftObjectPtr< GameDataClass > &  DataPath)
182{
183 if (auto* pResult = GameDataMap.Find(GameDataClass::StaticClass()))
184 {
185 if (pResult->Assets.IsEmpty() == false)
186 {
187 return *CastChecked<GameDataClass>(pResult->Assets[0]);
188 }
189 }
190
191 return *CastChecked<const GameDataClass>(LoadGameDataOfClass(GameDataClass::StaticClass(), DataPath, GameDataClass::StaticClass()->GetFName()));
192}
UPrimaryDataAsset * LoadGameDataOfClass(TSubclassOf< UPrimaryDataAsset > DataClass, const TSoftObjectPtr< UPrimaryDataAsset > &DataClassPath, FPrimaryAssetType PrimaryAssetType)
지정한 클래스 타입의 게임 데이터 에셋을 동기 로드하고 GameDataMap에 등록합니다.
Definition DataAssetManager.cpp:315
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetOrLoadTypedGameData() [2/2]

template<typename TData >
const TData & UDataAssetManager::GetOrLoadTypedGameData ( const TSoftObjectPtr< TData > &  DataPath)
protected

◆ GetSubclass() [1/2]

template<typename AssetType >
TSubclassOf< AssetType > UDataAssetManager::GetSubclass ( const TSoftClassPtr< AssetType > &  AssetPointer,
bool  bKeepInMemory 
)
154{
155 TSubclassOf<AssetType> LoadedSubclass;
156 const FSoftObjectPath& AssetPath = AssetPointer.ToSoftObjectPath();
157
158 if (AssetPath.IsNull())
159 {
160 return LoadedSubclass;
161 }
162
163 LoadedSubclass = AssetPointer.Get();
164
165 if (LoadedSubclass == nullptr)
166 {
167 LoadedSubclass = Cast<UClass>(SynchronousLoadAsset(AssetPath));
168 ensureAlwaysMsgf(LoadedSubclass, TEXT("Failed to load asset class [%s]"), *AssetPointer.ToString());
169 }
170
171 if (LoadedSubclass && bKeepInMemory)
172 {
173 GetInstance().LoadedAssets.Add(Cast<UObject>(LoadedSubclass));
174 }
175
176 return LoadedSubclass;
177}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetSubclass() [2/2]

template<typename TData >
static TSubclassOf< TData > UDataAssetManager::GetSubclass ( const TSoftClassPtr< TData > &  AssetPointer,
bool  bKeepInMemory = true 
)
static

◆ InitializeOnManager()

void UDataAssetManager::InitializeOnManager ( )
protected

◆ LoadAsyncByName()

void UDataAssetManager::LoadAsyncByName ( const FName &  AssetName,
FAsyncLoadCompletedDelegate  CompletedDelegate = FAsyncLoadCompletedDelegate() 
)
static

Primary Asset 이름으로 에셋을 비동기 로드합니다.

Asset Manager에 등록된 모든 Primary Asset 중 이름이 일치하는 항목을 탐색한 뒤 LoadAsyncByPath에 위임합니다. 동일한 이름이 여러 타입에 등록된 경우 첫 번째 매칭만 로드됩니다.

매개변수
AssetName로드할 에셋의 PrimaryAssetName
CompletedDelegate로드 완료 시 호출될 델리게이트 (에셋 이름, 로드된 UObject 전달)
93{
94 UDataAssetManager& Instance = GetInstance();
95
96 TArray<FPrimaryAssetId> AllAssetIds;
97 Instance.GetPrimaryAssetIdList(FPrimaryAssetType(), AllAssetIds);
98
99 const FPrimaryAssetId* FoundId = AllAssetIds.FindByPredicate([&AssetName](const FPrimaryAssetId& Id)
100 {
101 return Id.PrimaryAssetName == AssetName;
102 });
103
104 if (FoundId == nullptr)
105 {
106 LOG_WARNING(LogCKAsset, "LoadAsyncByName: '%s' 이름의 Primary Asset을 찾을 수 없습니다.", *AssetName.ToString());
107 return;
108 }
109
110 FAssetData AssetData;
111 Instance.GetPrimaryAssetData(*FoundId, AssetData);
112
113 const FSoftObjectPath AssetPath = AssetData.ToSoftObjectPath();
114 LoadAsyncByPath(AssetPath, CompletedDelegate);
115}
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:31
static void LoadAsyncByPath(const FSoftObjectPath &AssetPath, FAsyncLoadCompletedDelegate CompletedDelegate=FAsyncLoadCompletedDelegate())
소프트 오브젝트 경로로 에셋을 비동기 로드합니다.
Definition DataAssetManager.cpp:49
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ LoadAsyncByPath()

void UDataAssetManager::LoadAsyncByPath ( const FSoftObjectPath &  AssetPath,
FAsyncLoadCompletedDelegate  CompletedDelegate = FAsyncLoadCompletedDelegate() 
)
static

소프트 오브젝트 경로로 에셋을 비동기 로드합니다.

JobManager에 로드 작업을 등록하고 실행합니다. 내부적으로 WaitUntilComplete를 사용하므로 실제로는 블로킹 방식으로 동작합니다.

매개변수
AssetPath로드할 에셋의 소프트 오브젝트 경로
CompletedDelegate로드 완료 시 호출될 델리게이트 (에셋 이름, 로드된 UObject 전달)
50{
51 UDataAssetManager& Instance = GetInstance();
52
53 auto LoadJobLambda = [&Instance, AssetPath](const FDataAssetLoadJob& Job, TSharedPtr<FStreamableHandle>& OutHandle)
54 {
55 FStreamableManager& Manager = Instance.GetStreamableManager();
56 OutHandle = Manager.RequestAsyncLoad(AssetPath);
57 };
58
59 Instance.JobManager.CreateAndAddNewJob("LoadByPath", 1.0f, LoadJobLambda);
60
61 DataAssetLoadJobProgress Progress;
62 Progress.BindUObject(&Instance, &UDataAssetManager::OnUpdateLoadPercentage);
63 ensureAlwaysMsgf(Progress.IsBound(), TEXT("OnUpdateLoadPercentage 함수 등록에 실패했습니다. "));
64
65 auto OnCompleted = [AssetPath, CompletedDelegate](float ElapsedTime)
66 {
67 if (CompletedDelegate.IsBound() == false)
68 {
69 return;
70 }
71
72 UObject* LoadedAsset = AssetPath.ResolveObject();
73 const FName AssetName = AssetPath.GetAssetFName();
74 CompletedDelegate.Execute(AssetName, LoadedAsset);
75 LOG_SCREEN("모든 시작 작업이 %.2f초 만에 완료되었습니다", ElapsedTime);
76 };
77
78 Instance.JobManager.RunAllJobs(Progress, OnCompleted);
79}
#define LOG_SCREEN(Format,...)
Definition CK_UE.h:41
FDataAssetJobManager JobManager
Definition DataAssetManager.h:114
void OnUpdateLoadPercentage(float Percentage)
void RunAllJobs(const DataAssetLoadJobProgress &Progress=nullptr)
Definition DataAssetJobManager.cpp:11
void CreateAndAddNewJob(const ::FString &InJobName, float InJobWeight, const TFunction< void(const FDataAssetLoadJob &, TSharedPtr< FStreamableHandle > &)> &InJobFunc)
Definition DataAssetJobManager.cpp:17
Definition DataAssetLoadJob.h:8
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ LoadGameDataOfClass()

UPrimaryDataAsset * UDataAssetManager::LoadGameDataOfClass ( TSubclassOf< UPrimaryDataAsset >  DataClass,
const TSoftObjectPtr< UPrimaryDataAsset > &  DataClassPath,
FPrimaryAssetType  PrimaryAssetType 
)
protected

지정한 클래스 타입의 게임 데이터 에셋을 동기 로드하고 GameDataMap에 등록합니다.

에디터 환경에서는 LoadSynchronous()를 사용하고, 런타임에서는 LoadPrimaryAssetsWithType()으로 스트리밍 후 WaitUntilComplete()로 대기합니다.

매개변수
DataClass로드할 게임 데이터의 UClass
DataClassPath로드할 에셋의 소프트 오브젝트 포인터
PrimaryAssetTypeAsset Manager에 등록된 Primary Asset 타입
반환값
로드된 UPrimaryDataAsset 포인터. 실패 시 nullptr
316{
317 UPrimaryDataAsset* Asset = nullptr;
318 DECLARE_SCOPE_CYCLE_COUNTER(TEXT("Loading GameData Object"), STAT_GameData, STATGROUP_LoadTime);
319
320 if (DataClassPath.IsNull())
321 {
322 return Asset;
323 }
324
325#if WITH_EDITOR
326 FText Message = FText::Format(NSLOCTEXT("PlaybackEditor", "BeginLoadingGameDataTask", "Loading GameData {0}"), FText::FromName(DataClass->GetFName()));
327 FScopedSlowTask SlowTask(0, Message);
328 SlowTask.MakeDialog(false, true);
329#endif
330
331 LOG_INFO(LogCKAsset, "게임 데이터 로드 중: %s ...", *DataClassPath.ToString());
332 SCOPE_LOG_TIME_IN_SECONDS(TEXT(" ... GameData loaded!"), nullptr);
333
334 if (GIsEditor)
335 {
336 Asset = DataClassPath.LoadSynchronous();
337 LoadPrimaryAssetsWithType(PrimaryAssetType);
338 GameDataMap.FindOrAdd(DataClass).Assets.Add(Asset);
339 return Asset;
340 }
341
342 TSharedPtr<FStreamableHandle> Handle = LoadPrimaryAssetsWithType(PrimaryAssetType);
343
344 if (Handle.IsValid())
345 {
346 Handle->WaitUntilComplete(0.0f, false);
347 Asset = Cast<UPrimaryDataAsset>(Handle->GetLoadedAsset());
348 }
349
350 if (Asset)
351 {
352 GameDataMap.FindOrAdd(DataClass).Assets.Add(Asset);
353 return Asset;
354 }
355 else
356 {
357 return nullptr;
358 }
359}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnAllDataLoadCompleted()

void UDataAssetManager::OnAllDataLoadCompleted ( )
protected

◆ OnUpdateLoadPercentage()

void UDataAssetManager::OnUpdateLoadPercentage ( float  Percentage)
protected
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RegisterBundleAssets()

void UDataAssetManager::RegisterBundleAssets ( const TArray< UObject * > &  InAssets)
static

번들 로드 완료 후 에셋들을 GC 방지 풀에 등록합니다.

DataBundleRegistry::OnAssetsLoaded에서 호출됩니다.

매개변수
InAssetsFStreamableHandle에서 수집한 UObject 포인터 목록
197{
198 UDataAssetManager& Instance = GetInstance();
199
200 for (UObject* Asset : InAssets)
201 {
202 if (Asset == nullptr)
203 {
204 continue;
205 }
206
207 Instance.LoadedAssets.Add(Asset);
208 }
209
210 LOG_INFO(LogCKAsset, "번들 에셋 %d개를 GC 방지 풀에 등록했습니다.", InAssets.Num());
211}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ShouldLogAssetLoads()

bool UDataAssetManager::ShouldLogAssetLoads ( )
staticprotected

에셋 로드 로깅 여부를 반환합니다.

커맨드라인에 -LogAssetLoads 인자가 있을 때 true를 반환합니다.

반환값
로깅 활성화 여부
158{
159 return FParse::Param(FCommandLine::Get(), TEXT("LogAssetLoads"));
160}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ StartInitialLoading()

void UDataAssetManager::StartInitialLoading ( )
overrideprotectedvirtual

엔진 시작 시 초기 에셋 로딩을 수행합니다.

UAssetManager::StartInitialLoading을 호출한 뒤, GameDataPath에 지정된 Primary Data Asset을 JobManager를 통해 로드합니다.

268{
269 Super::StartInitialLoading();
270
271 if (InitialGameDataPaths.IsEmpty())
272 {
273 LOG_WARNING(LogCKAsset, "불러올 데이터가 없습니다. ");
274 return;
275 }
276
277
278 LOG_INFO(LogCKAsset, "데이터 로드를 시작합니다. ");
279
280
281 for (int32 Index = 0; Index < InitialGameDataPaths.Num(); ++Index)
282 {
283 const FString JobName = FString::Printf(TEXT("LoadGameData %d"), Index);
285 }
286
287 DataAssetLoadJobProgress Progress;
288
289 Progress.BindUObject(this, &UDataAssetManager::OnUpdateLoadPercentage);
290
291 if (Progress.IsBound() == false)
292 {
293 LOG_ERROR(LogCKAsset, "OnUpdateLoadPercentage 함수 등록에 실패했습니다.");
294 return;
295 }
296
297 JobManager.RunAllJobs(Progress, [this](const float ElapsedTime)
298 {
299 LOG_INFO(LogCKAsset, "모든 시작 작업이 %.2f초 만에 완료되었습니다", ElapsedTime);
300 });
301}
virtual void TryCreateLoadJobForDataAsset(TSoftObjectPtr< UPrimaryDataAsset > DataPath, FString JobName)
Definition DataAssetManager.cpp:235
TArray< TSoftObjectPtr< UPrimaryDataAsset > > InitialGameDataPaths
Definition DataAssetManager.h:111
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ SynchronousLoadAsset()

UObject * UDataAssetManager::SynchronousLoadAsset ( const FSoftObjectPath &  AssetPath)
staticprotected

소프트 오브젝트 경로로 에셋을 동기 로드합니다.

Asset Manager가 초기화된 경우 StreamableManager를 통해 로드하고, 그렇지 않은 경우 TryLoad()로 폴백합니다.

매개변수
AssetPath로드할 에셋의 소프트 오브젝트 경로
반환값
로드된 UObject 포인터. 경로가 유효하지 않으면 nullptr
128{
129 if (AssetPath.IsValid())
130 {
131 TUniquePtr<FScopeLogTime> LogTimePtr;
132
134 {
135 LogTimePtr = MakeUnique<FScopeLogTime>(*FString::Printf(TEXT("Synchronously loaded asset [%s]"), *AssetPath.ToString()), nullptr, FScopeLogTime::ScopeLog_Seconds);
136 }
137
138 if (IsInitialized())
139 {
140 return GetStreamableManager().LoadSynchronous(AssetPath, false);
141 }
142
143 return AssetPath.TryLoad();
144 }
145
146 return nullptr;
147}
static bool ShouldLogAssetLoads()
에셋 로드 로깅 여부를 반환합니다.
Definition DataAssetManager.cpp:157
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ TryCreateLoadJobForDataAsset()

void UDataAssetManager::TryCreateLoadJobForDataAsset ( TSoftObjectPtr< UPrimaryDataAsset >  DataPath,
FString  JobName 
)
protectedvirtual
236{
237 if (DataPath.IsNull() || JobName.IsEmpty())
238 {
239 LOG_ERROR(LogCKAsset, "유효하지 않은 데이터 경로 또는 이미 로드된 데이터입니다: %s", *DataPath.ToString());
240 return;
241 }
242
243 auto LoadJobLambda = [this, DataPath](const auto _, const auto __)
244 {
245 UObject* Loaded = SynchronousLoadAsset(DataPath.ToSoftObjectPath());
246
247 if (UPrimaryDataAsset* Asset = Cast<UPrimaryDataAsset>(Loaded))
248 {
249 GameDataMap.FindOrAdd(Asset->GetClass()).Assets.Add(Asset);
250 }
251 else
252 {
253 LOG_ERROR(LogCKAsset, "초기화 데이터 에셋 로드 실패: %s", *DataPath.ToString());
254 }
255 };
256
257 JobManager.CreateAndAddNewJob(JobName, 25.0f, LoadJobLambda);
258}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UnregisterBundleAssets()

void UDataAssetManager::UnregisterBundleAssets ( const TArray< UObject * > &  InAssets)
static

번들 언로드 시 GC 방지 풀에서 에셋들을 제거합니다.

DataBundleRegistry::Release에서 호출됩니다.

매개변수
InAssets제거할 UObject 포인터 목록
215{
216 UDataAssetManager& Instance = GetInstance();
217
218 for (UObject* Asset : InAssets)
219 {
220 if (Asset == nullptr)
221 {
222 continue;
223 }
224
225 Instance.LoadedAssets.Remove(Asset);
226 }
227
228 LOG_INFO(LogCKAsset, "번들 에셋 %d개를 GC 방지 풀에서 제거했습니다.", InAssets.Num());
229}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ GameDataMap

TMap<TObjectPtr<UClass>, FGameDataAssetList> UDataAssetManager::GameDataMap
protected

◆ InitialGameDataPaths

TArray<TSoftObjectPtr<UPrimaryDataAsset> > UDataAssetManager::InitialGameDataPaths
protected

◆ JobManager

FDataAssetJobManager UDataAssetManager::JobManager
protected

◆ LoadedAssets

TSet<TObjectPtr<UObject> > UDataAssetManager::LoadedAssets
private

이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: