Files
UnrealEngineUWP/Engine/Documentation/Source/Programming/Assets/AsyncLoading/AsyncLoading.KOR.udn
Mitchell Wilson bfe9113685 Copying //UE4/Dev-Documentation to //UE4/Samples-Main (Source: //UE4/Dev-Documentation @ 4321946)
#lockdown Nick.Penwarden
#rb none

============================
  MAJOR FEATURES & CHANGES
============================

Change 3683933 by Jeff.Wilson

	Updated metadata

Change 4094604 by Richard.Hinckley

	Fixing a bug in Match3 with incorrect attempts at unbinding a delegate. Not as much of a code problem as a bad learning example.
	#jira UE-59621

Change 4099126 by Sungjin.Hong

	#loc UE4DocKOR

Change 4105127 by Sungjin.Hong

	removed wrong [include]

Change 4105128 by Sungjin.Hong

	#loc UE4DocKor

Change 4169203 by Sungjin.Hong

	#loc UE4DocKOR

Change 4201118 by Mitchell.Wilson

	Initial check-in of 4.20 Release Notes - Major features only.

Change 4201313 by Jeff.Wilson

	misc fixes

Change 4201319 by Mitchell.Wilson

	Adding 4.20 minor release notes.

Change 4201528 by Jeff.Wilson

	misc fixes

Change 4216361 by Sungjin.Hong

	#loc UE4DocKOR moved or deleted

Change 4216416 by Sungjin.Hong

	#loc UE4DocKOR

Change 4216563 by Sungjin.Hong

	#loc UE4DocKOR

Change 4217772 by Mitchell.Wilson

	Adding some missing minor release notes in the Slate and UMG sections.

Change 4218292 by Mitchell.Wilson

	Commenting out Shotgun documentation link and adding a "coming soon" blurb

Change 4219358 by Tianmin.Xie

	#loc UE4DocCHN moved or deleted

Change 4219564 by Sungjin.Hong

	#loc UE4DocKOR

Change 4220008 by Jeff.Wilson

	Reordered top features; updated language for Niagara

Change 4220814 by Mitchell.Wilson

	Updating Niagara landing page and adding new image.

Change 4220945 by Mitchell.Wilson

	Updating page with note pointing to digital humans page and added related page link for digital humans

Change 4221079 by Mitchell.Wilson

	Submitting page and images for Working With Tracks In Sequencer.

Change 4221223 by Mitchell.Wilson

	Checking in updates to Sequence Recorder page and new images.

Change 4222174 by Yang.Zhang

	#loc UE4DocCHN check in 420 Release Note againest INT verison 4218292  (need update againest for latest release note)

Change 4222188 by Sungjin.Hong

	#loc UE4DocKOR moved or deleted

Change 4222189 by Yang.Zhang

	#loc UE4DocCHN 420 Release Note Update against INT 4220008

Change 4222217 by Tianmin.Xie

	#loc UE4DocCHN moved or deleted

Change 4222310 by Yang.Zhang

	#loc UE4DocCHN 420 Release Note Typo Fixing against INT 4220008

Change 4222335 by Yang.Zhang

	#loc UE4DocCHN TwinblastBust Update against INT 4220945

Change 4222348 by Yang.Zhang

	#loc UE4DocCHN SequenceRecorder Update against INT 3866572

Change 4222355 by Yang.Zhang

	#loc UE4DocCHN SequenceRecorder Update against INT 3244012

Change 4222371 by Yang.Zhang

	#loc UE4DocCHN

Change 4222713 by Sungjin.Hong

	#loc UE4DocKOR

Change 4223218 by Mitchell.Wilson

	Adding Controlling Anim Instances with Sequencer page and images

Change 4223330 by Mitchell.Wilson

	Minor update to formatting.

Change 4223439 by Mitchell.Wilson

	Submitting new TimeRefactorNotes page and images

Change 4224395 by Sungjin.Hong

	#loc UE4DocKOR moved or deleted

Change 4224481 by Yang.Zhang

	#loc UE4DocCHN 419 Release Note Update against INT 3941748

Change 4224497 by Yang.Zhang

	#loc UE4DocCHN moved or deleted

Change 4228591 by Yang.Zhang

	#loc UE4DocCHN Localization Edit Against 4221079

Change 4228596 by Yang.Zhang

	#loc UE4DocCHN

Change 4228598 by Yang.Zhang

	#loc UE4DocCHN Localization Bug Fixing

Change 4228600 by Yang.Zhang

	#loc UE4DocCHN Localization Edit

Change 4233224 by Yang.Zhang

	#loc UE4DocCHN Localization Bug Fixing

Change 4233437 by Sungjin.Hong

	#loc UE4DocKOR

Change 4233440 by Sungjin.Hong

	#loc UE4DocKOR

Change 4240164 by Sungjin.Hong

	#loc UE4DocKOR

Change 4242799 by Yang.Zhang

	#loc UE4DocCHN Localization Editor

Change 4243822 by Sam.Deiter

	Manually moveing these files over from the 4.20 release branch.

Change 4257108 by Ben.Zeigler

	Switch ActionRPG to use IWYU headers

Change 4257489 by Sungjin.Hong

	#loc UE4DocKor

Change 4258770 by Mitchell.Wilson

	Updating filters page and images with 4.20 changes

Change 4258956 by Mitchell.Wilson

	Updating Color Picker doc and images for 4.20

Change 4261325 by Sungjin.Hong

	#loc UE4DocKOR

Change 4261534 by Mitchell.Wilson

	Updating mobilepreviewer doc for 4.20 changes.

Change 4263566 by Robert.Gervais

	Replacing images to address doc-md tool erros. #UE4Doc #fyi Jeff.Wilson, Mitchell.Wilson

Change 4264102 by Yang.Zhang

	#loc UE4DocCHN Localization Edit

Change 4264104 by Yang.Zhang

	#loc UE4DocCHN Localization Edit

Change 4264120 by Yang.Zhang

	#loc UE4DocCHN Localization Bug Fixing

Change 4264799 by paulo.souza

	Fix ActionRPG main menu logo "action" and "sample" labels were misplaced #fyi sam.deiter #rb none

Change 4267571 by Sungjin.Hong

	#loc UE4DocKOR

Change 4268090 by Sungjin.Hong

	#loc UE4DocKOR

Change 4272340 by Mitchell.Wilson

	Adding all MR pages for 4.20

Change 4273092 by Mitchell.Wilson

	Updating Mesh Details page for 4.20

Change 4276731 by Mitchell.Wilson

	Checking in nDisplay doc.

Change 4276770 by Jeff.Wilson

	Updated formatting

Change 4276798 by Jeff.Wilson

	Minor formatting update

Change 4276998 by Mitchell.Wilson

	Checking in nDisplay changes for 4.20

Change 4278693 by Sungjin.Hong

	#loc UE4DocKOR moved or deleted

Change 4279407 by Mitchell.Wilson

	Adding ScriptingAndAutomation folder and content

Change 4279418 by Mitchell.Wilson

	Updating crumbs

Change 4279440 by Mitchell.Wilson

	Adding INT to file.

Change 4280273 by paulo.souza

	ARPG - Player AI can now use Potions and Skills when possible/necessary

Change 4280342 by Mitchell.Wilson

	Adding blueprint/python switchable content.

Change 4282437 by Yang.Zhang

	#loc UE4DocCHN moved or deleted

Change 4282603 by Yang.Zhang

	Outsourcing 20180814

Change 4282681 by Yang.Zhang

	#loc UE4DocCHN English Update

Change 4282721 by Yang.Zhang

	#loc UE4DocCHN Localization Editor 20180807

Change 4282938 by Sungjin.Hong

	#loc UE4DocKOR

Change 4283510 by paulo.souza

	ARPG - Initial support for consumable items (health and mana potions)

Change 4283679 by Mitchell.Wilson

	Submitting updates to some ScriptingAndAutomation pages and adding HowTos sections.

Change 4283941 by Mitchell.Wilson

	Submitting new page and content

Change 4284256 by Mitchell.Wilson

	Minor updates to fix topic lists

Change 4284421 by Mitchell.Wilson

	Checking in python page and content

Change 4284468 by Mitchell.Wilson

	Minor updates.

Change 4284888 by Mitchell.Wilson

	Adding new page and content

Change 4285161 by Mitchell.Wilson

	Adding new page and content

Change 4285387 by Jeff.Wilson

	minor styling updates

Change 4287470 by Mitchell.Wilson

	Adding new page and content

Change 4291477 by Sungjin.Hong

	#loc UE4DocKOR moved or deleted

Change 4291478 by Sungjin.Hong

	#loc UE4DocKOR

Change 4291995 by Sungjin.Hong

	#loc UE4DocKOR

Change 4292193 by Mitchell.Wilson

	Updating page and content

Change 4292827 by Mitchell.Wilson

	adding digital humans page and content

Change 4293098 by Mitchell.Wilson

	Updating CascadeToNiagara and adding some content

Change 4295473 by Sungjin.Hong

	#loc UE4DocKOR moved or deleted

Change 4295612 by Sungjin.Hong

	#loc UE4DocKOR

Change 4295997 by Sungjin.Hong

	#loc UE4DocKOR

Change 4296011 by Sungjin.Hong

	#loc UE4DocKOR

Change 4296954 by Mitchell.Wilson

	Fixing LODs on one mesh to resolve flicker. Rebuilt lighting
	#jira UE-58995

Change 4297342 by Mitchell.Wilson

	Updating copyright text in Match3 credits
	#jira UE-61819

Change 4298354 by Mitchell.Wilson

	Updating Photorealistic Character Bust eye material to be consistent with Content Examples setup.
	#jira UE-59761

Change 4299738 by Yang.Zhang

	#loc UE4DocCHN moved or deleted

Change 4299936 by Sungjin.Hong

	#loc UE4DocKOR

Change 4300185 by Mitchell.Wilson

	Updating page to 4.20

Change 4300194 by Mitchell.Wilson

	Updating page and one image

Change 4300247 by Jeff.Wilson

	Fixed publishing errors

Change 4300533 by Jeff.Wilson

	Updates for publishing

Change 4300884 by Mitchell.Wilson

	Updating page and content

Change 4301216 by Mitchell.Wilson

	Updating page and content

Change 4301268 by Mitchell.Wilson

	Updating page and content

Change 4301301 by Mitchell.Wilson

	Updating page and content

Change 4302195 by Mitchell.Wilson

	Updating page and adding content

Change 4303253 by Yang.Zhang

	#loc UE4DocCHN Localization Edit 20180414

Change 4303325 by Sungjin.Hong

	#loc UE4DocKOR

Change 4303706 by Sungjin.Hong

	#loc UE4DocKOR

Change 4305335 by Mitchell.Wilson

	Fixing errors on pages in prep for publish

Change 4305416 by Mitchell.Wilson

	Removing Graph Panel section to resolve errors since it was already commented out.

Change 4305436 by Mitchell.Wilson

	Removing graph panel from commented section to resolve errors

Change 4305504 by Mitchell.Wilson

	Fixing up an image to resolve errors

Change 4305576 by Mitchell.Wilson

	Updated graph panel link to new location.

Change 4305778 by Mitchell.Wilson

	Fixing broken comment

Change 4306900 by Sungjin.Hong

	#loc UE4DocKOR

Change 4307010 by Mitchell.Wilson

	Updating this page to resolve issues on another

Change 4307038 by Mitchell.Wilson

	Removing missing image references, but leaving the descriptions if they ever need to be added back. images are commented out.

Change 4307067 by Mitchell.Wilson

	Removing outdated note to resolve errors.

Change 4307073 by Mitchell.Wilson

	Removing old link that was commented out to resolve errors

Change 4307105 by Mitchell.Wilson

	Removing old image that is no longer used in the new CMS

Change 4307127 by Mitchell.Wilson

	Fixing up comment and removing section that is not used to resolve errors

Change 4307254 by Mitchell.Wilson

	Removing some old URL references that were already commented out to resolve errors.

Change 4307277 by Mitchell.Wilson

	Fixing up incorrect link to resolve errors

Change 4307289 by Mitchell.Wilson

	Fixing up incorrect URL to resovle errors

Change 4307291 by Mitchell.Wilson

	Updating URL for a page that was moved.

Change 4307670 by Mitchell.Wilson

	Fixing up multiple issues to resolve errors

Change 4308120 by Mitchell.Wilson

	Fixing up comments to resolve errors

Change 4308165 by Mitchell.Wilson

	Removing old commented section to resolve errors

Change 4308189 by Mitchell.Wilson

	Removing commented out related pages section to resolve errors.

Change 4308942 by Mitchell.Wilson

	Removing topic image link to resolve error

Change 4309000 by Mitchell.Wilson

	Fixing up some typos in images to resolve errors

Change 4309042 by Mitchell.Wilson

	Fixing up old URL to resolve errors

Change 4309060 by Mitchell.Wilson

	Updating URLs to resolve crashing

Change 4309073 by Mitchell.Wilson

	Updating URLs to resolve crash

Change 4309085 by Mitchell.Wilson

	Removing old URL located in a comment to resolve error

Change 4309106 by Mitchell.Wilson

	Updating related pages to resolve errors

Change 4309130 by Mitchell.Wilson

	Fixing topic image to resolve error

Change 4309167 by Mitchell.Wilson

	Remove include to resolve errors

Change 4309172 by Mitchell.Wilson

	Removing include to resolve errors

Change 4309183 by Mitchell.Wilson

	Fixing up table to resolve error

Change 4309189 by Mitchell.Wilson

	Removing old image to resolve errors

Change 4310574 by Sungjin.Hong

	#loc UE4DocKOR

Change 4310769 by Sungjin.Hong

	#loc UE4DocKOR

Change 4311446 by Mitchell.Wilson

	Adding missing image file

Change 4312754 by Jeff.Wilson

	Added new DoF pages and updates

Change 4313881 by Sungjin.Hong

	#loc UE4DocKOR moved or deleted

Change 4313999 by Yang.Zhang

	#loc UE4DocCHN moved or deleted

Change 4314037 by Sungjin.Hong

	corrected some links, tags, and spaces

Change 4314071 by Sungjin.Hong

	#loc UE4DocKOR

Change 4314302 by Sungjin.Hong

	#loc UE4DocKOR

Change 4314504 by Mitchell.Wilson

	Adding missing tutorial image and updating tutorial.
	#jira UEDOC-7229

Change 4317861 by Sungjin.Hong

	#loc ?????? -> ??????

Change 4320148 by Mitchell.Wilson

	Removing comments on topics

Change 4320159 by Jeff.Wilson

	Fixed async gifs

Change 4320499 by Mitchell.Wilson

	Checking in topic images

Change 4321330 by Sungjin.Hong

	#loc UE4DocKOR

Change 4321337 by Yang.Zhang

	Outsourcing 20180821

Change 4321362 by Yang.Zhang

	#loc UE4DocCHN Localization Bug Fixing 2080828

[CL 4322126 by Mitchell Wilson in Main branch]
2018-08-28 10:33:31 -04:00

86 lines
9.7 KiB
Plaintext

INTSourceChangelist:3606403
Availability:Public
Title:비동기 애셋 로딩
Crumbs:%ROOT%, Programming
Description:실행시간에 애셋을 로드/언로드하는 메서드입니다.
Version: 4.9
[TOC(start:2)]
UE4 에는 애셋 데이터 비동기 로딩을 훨씬 쉽게 할 수 있는 신규 시스템이 다수 도입, UE3 의 기존 시크프리 콘텐츠 패키지의 함수성 대다수를 대체하고 있습니다. 이 신규 시스템은 개발 도중이나 디바이스상에서 쿠킹된 데이터로 실행할 때나 동일하게 작동하므로, 필요에 따라 데이터를 로딩하기 위한 별도의 코드 패스를 유지할 필요가 없습니다. 필요에 따라 데이터를 로드 및 레퍼런싱에 사용되는 방법은 일반적으로 두 가지 있습니다.
## FSoftObjectPaths 와 TSoftObjectPtr
아티스트나 디자이너가 애셋을 레퍼런싱하는 가장 쉬운 방법은 하드 포인터의 UProperty 를 만든 다음 카테고리를 지정하는 것입니다. UE4 에서 애셋을 레퍼런싱하는 하드 UObject 포인터 프로퍼티가 있다면, 그 프로퍼티가 포함된 오브젝트가 (맵에 배치되거나, 게임인포같은 것에서 레퍼런싱되어) 로드될 때 애셋이 로드됩니다. 주의를 기울이지 않으면 게임 시작시 100% 의 애셋이 로드되어버리는 수가 생깁니다. 아티스트/디자이너가 하드 포인터와 같은 UI 를 사용해서 특정 애셋에 대한 레퍼런스를 만들되, 항상 로드되지는 않도록 하려면, `FSoftObjectPath` 또는 `TSoftObjectPtr` 을 사용하면 됩니다.
`FSoftObjectPath` 는 애셋의 전체 이름으로 된 스트링이 들어있는 단순한 구조체입니다. 클래스에 이 유형의 프로퍼티를 만들면, 에디터에는 마치 `UObject *` 프로퍼티인 양 나타납니다. 쿠킹과 리디렉터도 제대로 처리되므로, SoftObjectPath 가 있다면 디바이스에서의 정상 작동도 보장됩니다. TSoftObjectPtr 은 기본적으로 `FSoftObjectPath` 를 감싸는 `TWeakObjectPtr` 이며, 에디터 UI 에서 특정 클래스만 선택되게끔 제한시킬 수 있도록 하기 위해서 특정 클래스로 고정됩니다. 레퍼런싱된 애셋이 메모리에 존재한다면 `TSoftObjectPtr.Get()` 은 그것을 반환합니다. 존재하지 않는다면, `ToSoftObjectPath()` 을 호출하여 레퍼런싱하는 애셋을 찾아내어 아래 설명된 메서드를 사용해서 로드한 다음 `TSoftObjectPtr.Get()` 을 다시 호출하여 역참조합니다.
TSoftObjectPtr 과 SoftObjectPath 는 아티스트나 디자이너가 레퍼런스를 수동 셋업하는 경우에는 좋지만, 특정 조건을 만족하는 애셋 질의 작업을 모든 애셋 로드 없이 하려는 경우, 애셋 레지스트리와 오브젝트 라이브러리를 사용하는 것이 좋습니다.
## 애셋 레지스트리와 오브젝트 라이브러리
애셋 레지스트리는 애셋에 대한 메타데이터를 저장하여 해당 애셋에 대한 검색 및 질의를 가능케 해주는 시스템입니다. 에디터에서는 콘텐츠 브라우저에 정보를 표시하기 위해 사용되나, 게임플레이 코드에서 현재 로드되지 않은 게임플레이 애셋에 대한 메타데이터 질의를 하는 데도 사용할 수 있습니다. 애셋에 대한 데이터를 검색 가능하게 만들려면, 프로퍼티에 "AssetRegistrySearchable" 태그를 추가해 줘야 합니다. 애셋 레지스트리에 대한 질의는 FAssetData 유형 오브젝트를 반환하는데, 여기에는 오브젝트에 대한 정보는 물론 검색가능한 것으로 마킹된 프로퍼티가 들어있는 키->값 짝의 맵도 포함됩니다.
로드되지 않은 애셋 그룹을 가지고 작업하는 가장 쉬운 방법은 `ObjectLibrary` 입니다. `ObjectLibrary` 는 로드된 오브젝트와 로드되지 않은 오브젝트의 경우 FAssetData 를 합친 목록이 들어있는 오브젝트로, 공유 베이스 클래스를 상속합니다. 오브젝트 라이브러리에 검색할 경로를 주는 것으로 로드하면, 그 경로에 있는 모든 애셋이 추가됩니다. 이는 매우 유용할 수 있는데, 콘텐츠 폴더 일부분을 각기 다른 유형으로 지정하고, 아티스트/디자이너는 마스터 목록을 수동 편집할 필요 없이 새 애셋을 추가할 수 있기 때문입니다. 오브젝트 라이브러리를 사용해서 AssetData 를 디스크에서 로드하는 방법 예제는 이렇습니다:
if (!ObjectLibrary)
{
ObjectLibrary = UObjectLibrary::CreateLibrary(BaseClass, false, GIsEditor);
ObjectLibrary->AddToRoot();
}
ObjectLibrary->LoadAssetDataFromPath(TEXT("/Game/PathWithAllObjectsOfSameType");
if (bFullyLoad)
{
ObjectLibrary->LoadAssetsFromAssetData();
}
이 예제에서는 새 오브젝트 라이브러리를 생성하고, 베이스 클래스를 할당하면, 주어진 경로의 모든 애셋 데이터를 로드합니다. 그리고서 옵션을 통해 실제 애셋을 로드할 수도 있습니다. 애셋이 작은 경우 애셋을 전체 로드할 수도 있고, 쿠킹중인 경우 모두 쿠킹되도록 할 수도 있습니다. 쿠킹 도중 애셋 레지스트리 질의를 하고서 반환된 애셋을 로드하는 한, 오브젝트 라이브러리는 개발중인 데이터든 디바이스에서 쿠킹된 데이터든 똑같이 작동합니다. `ObjectLibrary` 에 애셋 데이터가 들어있는 상태라면, 질의를 통해 특정 애셋만 선택적으로 로드할 수 있습니다. 질의 방법에 대한 예제는 다음과 같습니다:
TArray<FAssetData> AssetDatas;
ObjectLibrary->GetAssetDataList(AssetDatas);
for (int32 i = 0; i < AssetDatas.Num(); ++i)
{
FAssetData& AssetData = AssetDatas[i];
const FString* FoundTypeNameString = AssetData.TagsAndValues.Find(GET_MEMBER_NAME_CHECKED(UAssetObject,TypeName));
if (FoundTypeNameString && FoundTypeNameString->Contains(TEXT("FooType")))
{
return AssetData;
}
}
이 예제에서는, 오브젝트 라이브러리에서 `TypeName` 칸에 "FooType" 이 들어있는 것들을 검색하여 처음 찾은 것을 반환합니다. 그 `AssetData` 가 생긴 후 `ToStringReference()` 를 호출하여 `FSoftObjectPath` 으로 변환하고 나면, 다음 시스템을 사용하여 비동기 로드가 가능합니다:
## StreamableManager 와 비동기 로딩
이제 디스크의 애셋을 레퍼런싱하는 `FSoftObjectPath` 가 생겼으니, 실제 비동기 로드는 어떻게 할까요? 가장 쉬운 방법은 FStreamableManager 입니다. 우선, `FStreamableManager` 를 만들어 줘야 하는데, 일종의 게임 전역 유일무이(singleton) 오브젝트, 이를테면 `DefaultEngine.ini` 에서 `GameSingletonClassName` 에 지정된 오브젝트에 넣는 것이 좋습니다. 그 후 거기에 `FSoftObjectPath` 를 전달한 다음 로드를 시작합니다. `SynchronousLoad` 는 단순한 로드 블록 후 오브젝트를 반환할 것입니다. 작은 오브젝트의 경우 이 메서드로 충분할 테지만, 메인 스레드를 너무 오래 붙잡아 둘 가능성이 있습니다. 그러한 경우에는 `RequestAsyncLoad` 를 사용해 줘야 하는데, 애셋 그룹을 비동기 로드한 다음 완료되면 델리게이트를 호출하는 것입니다. 예제입니다:
void UGameCheatManager::GrantItems()
{
TArray<FSoftObjectPath> ItemsToStream;
FStreamableManager& Streamable = UGameGlobals::Get().StreamableManager;
for(int32 i = 0; i < ItemList.Num(); ++i)
{
ItemsToStream.AddUnique(ItemList[i].ToStringReference());
}
Streamable.RequestAsyncLoad(ItemsToStream, FStreamableDelegate::CreateUObject(this, &UGameCheatManager::GrantItemsDeferred));
}
void UGameCheatManager::GrantItemsDeferred()
{
for(int32 i = 0; i < ItemList.Num(); ++i)
{
UGameItemData* ItemData = ItemList[i].Get();
if(ItemData)
{
MyPC->GrantItem(ItemData);
}
}
}
이 예제에서 ItemList 는 `TArray< TSoftObjectPtr<UGameItem> >` 이며, 에디터에서 디자이너에 의해 수정된 것입니다. 코드는 그 리스트에 대해 반복하여 `StringReferences` 로 변환시킨 다음 로드를 위한 대기열에 등록시킵니다. 그 아이템 전부가 로드되(거나 없어서 실패하)면 전달된 델리게이트를 호출합니다. 그러면 그 델리게이트는 같은 아이템 리스트에 대해 반복하여 그 역참조를 구한 다음 플레이어에게 전해줍니다. `StreamableManager` 는 델리게이트가 호출될 때까지 로드하는 애셋에 대한 하드 레퍼런스를 유지시켜, 비동기 로드하려 했던 오브젝트의 델리게이트가 호출되기도 전에 가비지 컬렉팅되는 일이 없도록 합니다. 델리게이트가 호출된 이후에는 그 레퍼런스가 해제되므로, 계속해서 남아있도록 하려면 어딘가에 하드 레퍼런스를 해 줘야 합니다.
같은 메서드를 사용해서 `FAssetData` 를 비동기 로드할 수도 있는데, 그냥 `ToStringReference` 를 호출한 다음 배열에 추가시키고 델리게이트를 붙여 RequestAsyncLoad 를 호출해 주면 됩니다. 델리게이트는 원하는 무엇이든 될 수 있으므로, 원한다면 페이로드 정보와 함께 전달해 줄 수 있습니다. 위에 언급한 메서드를 조합하면 게임 내 어느 애셋에 대해서도 효율적인 로드가 가능한 시스템을 구축할 수 있을 것입니다. 메모리에 직접 접근하는 게임플레이 코드가 비동기 로드를 처리하도록 변환해 주는 작업에 시간이 조금 걸리겠지만, 그 이후에는 게임에서 발생하는 멈춤 현상이나 차지하는 메모리 양이 훨씬 줄어들 것입니다.