【UE4】StreamableManager에 대해서
StreamableManager를 사용하는 목적
게임 중에 필요한 자산을 동적으로 로드할 때 사용합니다.
기본적인 동작을 기재합니다.
※4.2x의 내용입니다
사용하기 전에
이 클래스가 게임 중에 여러 개 존재하면,
로드하고 있는 것의 관리가 곤란해져 버립니다.
게임에 하나만 존재하는 디자인을 추천합니다.
로드 방법
EX// シングルトン的なものから取得することを想定してます.
FStreamableManager &StreamableManager = MyApp::GetStreamableManager();
// ex : "Foo/AssetName.AssetName"
FStringAssetReference AssetReferense(TEXT(" ロードしたいもののパス "));
// 動的ロードを行います.
StreamableManager.RequestAsyncLoad(AssetReferense);
이렇게 로드합니다.
로드 상황 등을 조사하고 싶을 때는 반환 값으로 핸들이 전달되므로,
그쪽을 사용하면 잘 작동합니다.
완료되면 콜백을 호출할 수도 있습니다. ※후술
또, 패스를 직접 소스 코드중에 쓰면 알레이므로,
밖에서 취득하고 싶을 때는 소프트 레퍼런스를 이용하면 좋다고 생각합니다.
// ソフトリファレンスしたオブジェクトからパスを受け取る例
TSoftObjectPtr<UDataTable> LoadObject = /* ... */
:
const FStringAssetReference& AssetPath = LoadObject.ToSoftObjectPath();
핸들(FStreamableHandle)
진행 중인지 확인
로드중인가 어떤가 등은 요구했을 때에 받는 FStreamableHandle 로 판단할 수 있습니다.
동일한 자산에 대해 로드 요청을 두 번 이상 수행하면,
이미 메모리에 있기 때문에 버려질 때까지는 즉시 로드가 곧 끝나고, 콜백이 불립니다.
(핸들 Handle->IsLoadingInProgress() 가 true)
FStreamableHandle Handle = StreamableManager.RequestAsyncLoad(AssetReferense);
// 存在しないものなどをリクエストし、
// 失敗したときはnullptrになっているので、スマートポインタのチェックが必要です.
if ( Handle.IsValid() == false ) return;
// ロードが完了したかどうか(2回目のロードならすぐtrue).
if ( Handle->HasLoadCompleted() )
{
// ロード完了.
}
if ( Handle->IsLoadingInProgress() )
{
// ロード進行中.
}
로드 취소
로드 중이면 취소할 수 있습니다.
취소할 때는
등록한 완료 콜백은 호출되지 않습니다.
또한 이미 로드가 완료된 경우 취소할 수 없습니다.
Handle->CancelHandle();
로드한 항목 가져오기
핸들측으로부터 로드한 것을 취득할 수 있습니다.
Handle->GetLoadedAsset()
콜백
완료될 때 호출되는 콜백
완료되면 콜백을 받을 수 있습니다.
AssetReferense를 TArray로 복수 요청했을 때는 모두 끝났을 때에 콜백이 돌아옵니다.
여기 람다에서 설명합니다.
StreamableManager.RequestAsyncLoad(AssetReferense, []()
{
// 完了したときのコールバックをここに書きます.
});
기타 콜백
완료시뿐만 아니라 다른 콜백에는 종류가 있습니다.
콜백을 다시 등록할 수도 있습니다.
다만, 로드가 완료할 때까지 등록하지 않으면 등록할 수 없기 때문에 주의입니다.
(특히 2회 이상 불려 갔을 때는 로드가 곧 끝납니다)
// 完了したときのコールバックを登録できます.
Handle->BindCompleteDelegate( ... )
// キャンセルしたとき.
Handle->BindCancelDelegate( ... )
// 更新したとき.
Handle->BindUpdateDelegate( ... )
조심하다
메모리 관리
로드한 수만큼 사용하는 메모리는 증가합니다.
불필요한 것은 로드하지 않는 & 메모리에서 파기하는 것을 잊지 마세요.
폐기 실수
로드를 요청한 후,
로드가 완료되기 전에 레벨을 전환하고,
전환 후 완료 콜백 처리가 호출되어 오류가 발생했습니다 ...
로드하는 동안 전환하는 장면은 취소가 필요하다고 생각합니다.
마지막으로
메모 쓰기에 가까운 내용이었지만,
읽어 주셔서 감사합니다.
잘못된 곳이 있으면 수정하겠습니다.
Reference
이 문제에 관하여(【UE4】StreamableManager에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pino_tabetai/items/abd66146d9340d10ebb6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 클래스가 게임 중에 여러 개 존재하면,
로드하고 있는 것의 관리가 곤란해져 버립니다.
게임에 하나만 존재하는 디자인을 추천합니다.
로드 방법
EX// シングルトン的なものから取得することを想定してます.
FStreamableManager &StreamableManager = MyApp::GetStreamableManager();
// ex : "Foo/AssetName.AssetName"
FStringAssetReference AssetReferense(TEXT(" ロードしたいもののパス "));
// 動的ロードを行います.
StreamableManager.RequestAsyncLoad(AssetReferense);
이렇게 로드합니다.
로드 상황 등을 조사하고 싶을 때는 반환 값으로 핸들이 전달되므로,
그쪽을 사용하면 잘 작동합니다.
완료되면 콜백을 호출할 수도 있습니다. ※후술
또, 패스를 직접 소스 코드중에 쓰면 알레이므로,
밖에서 취득하고 싶을 때는 소프트 레퍼런스를 이용하면 좋다고 생각합니다.
// ソフトリファレンスしたオブジェクトからパスを受け取る例
TSoftObjectPtr<UDataTable> LoadObject = /* ... */
:
const FStringAssetReference& AssetPath = LoadObject.ToSoftObjectPath();
핸들(FStreamableHandle)
진행 중인지 확인
로드중인가 어떤가 등은 요구했을 때에 받는 FStreamableHandle 로 판단할 수 있습니다.
동일한 자산에 대해 로드 요청을 두 번 이상 수행하면,
이미 메모리에 있기 때문에 버려질 때까지는 즉시 로드가 곧 끝나고, 콜백이 불립니다.
(핸들 Handle->IsLoadingInProgress() 가 true)
FStreamableHandle Handle = StreamableManager.RequestAsyncLoad(AssetReferense);
// 存在しないものなどをリクエストし、
// 失敗したときはnullptrになっているので、スマートポインタのチェックが必要です.
if ( Handle.IsValid() == false ) return;
// ロードが完了したかどうか(2回目のロードならすぐtrue).
if ( Handle->HasLoadCompleted() )
{
// ロード完了.
}
if ( Handle->IsLoadingInProgress() )
{
// ロード進行中.
}
로드 취소
로드 중이면 취소할 수 있습니다.
취소할 때는
등록한 완료 콜백은 호출되지 않습니다.
또한 이미 로드가 완료된 경우 취소할 수 없습니다.
Handle->CancelHandle();
로드한 항목 가져오기
핸들측으로부터 로드한 것을 취득할 수 있습니다.
Handle->GetLoadedAsset()
콜백
완료될 때 호출되는 콜백
완료되면 콜백을 받을 수 있습니다.
AssetReferense를 TArray로 복수 요청했을 때는 모두 끝났을 때에 콜백이 돌아옵니다.
여기 람다에서 설명합니다.
StreamableManager.RequestAsyncLoad(AssetReferense, []()
{
// 完了したときのコールバックをここに書きます.
});
기타 콜백
완료시뿐만 아니라 다른 콜백에는 종류가 있습니다.
콜백을 다시 등록할 수도 있습니다.
다만, 로드가 완료할 때까지 등록하지 않으면 등록할 수 없기 때문에 주의입니다.
(특히 2회 이상 불려 갔을 때는 로드가 곧 끝납니다)
// 完了したときのコールバックを登録できます.
Handle->BindCompleteDelegate( ... )
// キャンセルしたとき.
Handle->BindCancelDelegate( ... )
// 更新したとき.
Handle->BindUpdateDelegate( ... )
조심하다
메모리 관리
로드한 수만큼 사용하는 메모리는 증가합니다.
불필요한 것은 로드하지 않는 & 메모리에서 파기하는 것을 잊지 마세요.
폐기 실수
로드를 요청한 후,
로드가 완료되기 전에 레벨을 전환하고,
전환 후 완료 콜백 처리가 호출되어 오류가 발생했습니다 ...
로드하는 동안 전환하는 장면은 취소가 필요하다고 생각합니다.
마지막으로
메모 쓰기에 가까운 내용이었지만,
읽어 주셔서 감사합니다.
잘못된 곳이 있으면 수정하겠습니다.
Reference
이 문제에 관하여(【UE4】StreamableManager에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pino_tabetai/items/abd66146d9340d10ebb6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// シングルトン的なものから取得することを想定してます.
FStreamableManager &StreamableManager = MyApp::GetStreamableManager();
// ex : "Foo/AssetName.AssetName"
FStringAssetReference AssetReferense(TEXT(" ロードしたいもののパス "));
// 動的ロードを行います.
StreamableManager.RequestAsyncLoad(AssetReferense);
// ソフトリファレンスしたオブジェクトからパスを受け取る例
TSoftObjectPtr<UDataTable> LoadObject = /* ... */
:
const FStringAssetReference& AssetPath = LoadObject.ToSoftObjectPath();
진행 중인지 확인
로드중인가 어떤가 등은 요구했을 때에 받는 FStreamableHandle 로 판단할 수 있습니다.
동일한 자산에 대해 로드 요청을 두 번 이상 수행하면,
이미 메모리에 있기 때문에 버려질 때까지는 즉시 로드가 곧 끝나고, 콜백이 불립니다.
(핸들 Handle->IsLoadingInProgress() 가 true)
FStreamableHandle Handle = StreamableManager.RequestAsyncLoad(AssetReferense);
// 存在しないものなどをリクエストし、
// 失敗したときはnullptrになっているので、スマートポインタのチェックが必要です.
if ( Handle.IsValid() == false ) return;
// ロードが完了したかどうか(2回目のロードならすぐtrue).
if ( Handle->HasLoadCompleted() )
{
// ロード完了.
}
if ( Handle->IsLoadingInProgress() )
{
// ロード進行中.
}
로드 취소
로드 중이면 취소할 수 있습니다.
취소할 때는
등록한 완료 콜백은 호출되지 않습니다.
또한 이미 로드가 완료된 경우 취소할 수 없습니다.
Handle->CancelHandle();
로드한 항목 가져오기
핸들측으로부터 로드한 것을 취득할 수 있습니다.
Handle->GetLoadedAsset()
콜백
완료될 때 호출되는 콜백
완료되면 콜백을 받을 수 있습니다.
AssetReferense를 TArray로 복수 요청했을 때는 모두 끝났을 때에 콜백이 돌아옵니다.
여기 람다에서 설명합니다.
StreamableManager.RequestAsyncLoad(AssetReferense, []()
{
// 完了したときのコールバックをここに書きます.
});
기타 콜백
완료시뿐만 아니라 다른 콜백에는 종류가 있습니다.
콜백을 다시 등록할 수도 있습니다.
다만, 로드가 완료할 때까지 등록하지 않으면 등록할 수 없기 때문에 주의입니다.
(특히 2회 이상 불려 갔을 때는 로드가 곧 끝납니다)
// 完了したときのコールバックを登録できます.
Handle->BindCompleteDelegate( ... )
// キャンセルしたとき.
Handle->BindCancelDelegate( ... )
// 更新したとき.
Handle->BindUpdateDelegate( ... )
조심하다
메모리 관리
로드한 수만큼 사용하는 메모리는 증가합니다.
불필요한 것은 로드하지 않는 & 메모리에서 파기하는 것을 잊지 마세요.
폐기 실수
로드를 요청한 후,
로드가 완료되기 전에 레벨을 전환하고,
전환 후 완료 콜백 처리가 호출되어 오류가 발생했습니다 ...
로드하는 동안 전환하는 장면은 취소가 필요하다고 생각합니다.
마지막으로
메모 쓰기에 가까운 내용이었지만,
읽어 주셔서 감사합니다.
잘못된 곳이 있으면 수정하겠습니다.
Reference
이 문제에 관하여(【UE4】StreamableManager에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pino_tabetai/items/abd66146d9340d10ebb6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
StreamableManager.RequestAsyncLoad(AssetReferense, []()
{
// 完了したときのコールバックをここに書きます.
});
// 完了したときのコールバックを登録できます.
Handle->BindCompleteDelegate( ... )
// キャンセルしたとき.
Handle->BindCancelDelegate( ... )
// 更新したとき.
Handle->BindUpdateDelegate( ... )
메모리 관리
로드한 수만큼 사용하는 메모리는 증가합니다.
불필요한 것은 로드하지 않는 & 메모리에서 파기하는 것을 잊지 마세요.
폐기 실수
로드를 요청한 후,
로드가 완료되기 전에 레벨을 전환하고,
전환 후 완료 콜백 처리가 호출되어 오류가 발생했습니다 ...
로드하는 동안 전환하는 장면은 취소가 필요하다고 생각합니다.
마지막으로
메모 쓰기에 가까운 내용이었지만,
읽어 주셔서 감사합니다.
잘못된 곳이 있으면 수정하겠습니다.
Reference
이 문제에 관하여(【UE4】StreamableManager에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pino_tabetai/items/abd66146d9340d10ebb6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【UE4】StreamableManager에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pino_tabetai/items/abd66146d9340d10ebb6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)