47 virtual void Initialize(FSubsystemCollectionBase& Collection)
override;
50 virtual void Deinitialize()
override;
53 UFUNCTION(BlueprintCallable, Category =
"Bundle")
73 void RequestLoad(
const FGameplayTagContainer& BundleTags, TFunction<
void(TArray<UDataBundleDefinition*>)> OnAllReady);
80 UFUNCTION(BlueprintCallable, Category =
"Bundle")
81 void Release(FGameplayTag BundleTag);
88 UFUNCTION(BlueprintCallable, Category =
"Bundle")
89 void ForceRelease(FGameplayTag BundleTag);
97 UFUNCTION(BlueprintCallable, Category =
"Bundle")
106 UFUNCTION(BlueprintCallable, Category =
"Bundle")
107 bool IsLoaded(FGameplayTag BundleTag)
const;
114 UFUNCTION(BlueprintCallable, Category =
"Bundle")
115 TArray<FGameplayTag> GetLoadedBundleTags()
const;
124 void ReleaseUnusedBundles(
const FGameplayTagContainer& RequiredTags);
137 template <
typename T>
138 T* GetBundleAsset(FGameplayTag BundleTag,
const TSoftObjectPtr<T>& AssetPtr)
const;
150 template <
typename T>
151 void RequestBundleAsset(FGameplayTag BundleTag,
const TSoftObjectPtr<T>& AssetPtr, TFunction<
void(T*)> OnReady);
163 template <
typename T>
166 template <
typename T>
167 static T* GetBundleAssetByTag(FGameplayTag BundleTag);
179 UFUNCTION(BlueprintCallable, Category =
"Bundle")
180 static TArray<UDataBundleDefinition*> FindBundleAssetsByTag(FGameplayTag BundleTag);
184 void ScanAndRegisterBundles();
187 void PreLoadBundles();
194 void OnAllDependenciesReady(FGameplayTag BundleTag);
203 void OnAssetsLoaded(FGameplayTag BundleTag);
210 void FlushPendingCallbacks(FGameplayTag BundleTag);
212 void NotifyBundleLoadedToAssets(
const TArray<UObject*>& Assets, FGameplayTag BundleTag);
213 void NotifyBundleReleasedToAssets(
const TArray<UObject*>& Assets, FGameplayTag BundleTag);
313 TSoftObjectPtr<T> AssetCapture = AssetPtr;
315 RequestLoad(BundleTag, [
this, BundleTag, AssetCapture, OnReady = MoveTemp(OnReady)]()
317 T* Asset = AssetCapture.Get();
319 if (Asset ==
nullptr)
321 LOG_WARNING(LogCKAsset,
"RequestBundleAsset: 번들 '%s' 로드 완료 후에도 에셋을 찾을 수 없습니다: %s", *BundleTag.ToString(), *AssetCapture.ToString());
T * GetBundleAsset(FGameplayTag BundleTag, const TSoftObjectPtr< T > &AssetPtr) const
로드된 번들에서 특정 에셋을 동기적으로 반환합니다.
Definition DataBundleRegistry.h:248
void RequestBundleAsset(FGameplayTag BundleTag, const TSoftObjectPtr< T > &AssetPtr, TFunction< void(T *)> OnReady)
번들을 비동기 로드한 뒤 에셋 포인터를 콜백으로 전달합니다.
Definition DataBundleRegistry.h:311
void RequestLoad(FGameplayTag BundleTag, TFunction< void(UDataBundleDefinition *)> OnReady=nullptr)
번들을 비동기 로드합니다. 로드 완료 시 OnReady 콜백을 호출합니다.
Definition DataBundleRegistry.cpp:162
번들 하나의 런타임 상태를 담는 구조체.
Definition DataBundleRegistry.h:222
TSharedPtr< FStreamableHandle > Handle
에셋 스트리밍 핸들. 언로드 시 명시적으로 해제됩니다.
Definition DataBundleRegistry.h:224
TArray< TFunction< void(UDataBundleDefinition *)> > PendingCallbacks
로드 완료 시 일괄 실행할 콜백 목록.
Definition DataBundleRegistry.h:230