AssetManager - osy9611/ProjectPT GitHub Wiki

Unity์—์„œ๋Š” Addressable์„ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ–ˆ์—ˆ๋‹ค. Unreal์˜ AssetManager์™€ ๋น„๊ตํ•ด ์ฐจ์ด์ ์„ ์ •๋ฆฌํ–ˆ๋‹ค.

Unity์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ ์—์…‹ ๊ด€๋ฆฌ๋ฒ•

  • ๊ธฐ๋ณธ์ ์œผ๋กœ Addressable์„ ์ด์šฉํ•ด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ–ˆ๋‹ค. (AssetBundle๊ณผ Resource ๋ฐฉ์‹๋„ ์žˆ์ง€๋งŒ ํ•ด๋‹น ๋ถ€๋ถ„์€ ์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ๋‹ค)
  • Addressable์„ ์ด์šฉํ•œ ResourceManager๋ฅผ ๊ตฌํ˜„ํ• ๋•Œ ๊ณ ๋ คํ–ˆ๋˜ ์‚ฌํ•ญ
    • ๋ฆฌ์†Œ์Šค ์ค‘๋ณต ๋กœ๋“œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ AsyncOperationHandle ๊ด€๋ฆฌํ•จ
    • ํ”„๋ฆฌํŒน ๋‚ด์—์„œ ์•”๋ฌต์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค ์ค‘๋ณต ๋กœ๋”ฉ๋˜๋Š” ๋ฌธ์ œ

Unreal์˜ AssetManager

  • ์œ ๋‹ˆํ‹ฐ์™€ ๋น„์Šทํ•˜๊ฒŒ ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ๋”ฉํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์ค‘์ ์„ ๋‘๊ณ ์žˆ๋‹ค.

  • Unreal์˜ ์—์…‹์˜ ์ข…๋ฅ˜

    • Primary Asset

      • AssetManager๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ๋กœ๋”ฉ ๊ฐ€๋Šฅํ•œ ์—์…‹

      • ๋Œ€ํ‘œ์ ์œผ๋กœ UWorld ์—์…‹์ด ์žˆ์Œ

      • UWorld์™€ ๊ฐ™์€ ๋งต์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์–ธ๋ฆฌ์–ผ ์—”์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋””ํดํŠธ ์„ธํŒ…์œผ๋กœ ์—์…‹ ๋งค๋‹ˆ์ €๊ฐ€ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

        image

    • Secondary Asset

      • ์—์…‹ ๋งค๋‹ˆ์ €๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋กœ๋”ฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์—์…‹
      • ๋Œ€๋ถ€๋ถ„์˜ ์—์…‹์ด Seconary Asset์ด๋‹ค.
  • Secondary Asset์„ AssetManager๋กœ ๋กœ๋”ฉํ•˜๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

    • AssetManager๋กœ ๋กœ๋“œ๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค.
    • LoadObject์™€ ๊ฐ™์ด ์„ž์–ด์„œ ์‚ฌ์šฉ์„ ํ•˜๊ฒŒ๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š”๊ฑฐ ๊ฐ™๋‹ค. LoadObject์™€ AssetManager๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋™์ผํ•œ ์—์…‹์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋กœ๋“œ๋  ์ˆ˜ ์žˆ๋‹ค.
  • Unity์˜ Addressable๊ณผ์˜ ์ฐจ์ด์ 

    ๊ธฐ๋Šฅ AssetManager Addressables (Unity)
    ํ•ธ๋“ค ๊ด€๋ฆฌ FStreamableHandle๋กœ ์ถ”์  ๊ฐ€๋Šฅ. ํ•„์ˆ˜๋Š” ์•„๋‹ˆ๋ฉฐ ํ•„์š”์— ๋”ฐ๋ผ ๊ด€๋ฆฌ. AsyncOperationHandle์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ด€๋ฆฌ. ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ์œ„ํ•ด ํ•ธ๋“ค ๋ฆด๋ฆฌ์ฆˆ ํ•„์š”.
    ์ค‘๋ณต ๋กœ๋”ฉ ๋ฐฉ์ง€ ์ž๋™์œผ๋กœ ์ค‘๋ณต ๋กœ๋“œ ๋ฐฉ์ง€. ๋™์ผ ๋ฆฌ์†Œ์Šค ์š”์ฒญ ์‹œ ๊ธฐ์กด ํ•ธ๋“ค ์žฌ์‚ฌ์šฉ. ์ž๋™์œผ๋กœ ์ค‘๋ณต ๋กœ๋“œ ๋ฐฉ์ง€. ๋™์ผ ๋ฆฌ์†Œ์Šค ์š”์ฒญ ์‹œ ํ•ธ๋“ค ์žฌ์‚ฌ์šฉ.
    ๋น„๋™๊ธฐ ๋กœ๋“œ ๋ฐฉ์‹ RequestAsyncLoad๋กœ ๋น„๋™๊ธฐ ๋กœ๋“œ ์ˆ˜ํ–‰. ์™„๋ฃŒ ์‹œ ์ฝœ๋ฐฑ ํ˜ธ์ถœ. Addressables.LoadAssetAsync๋กœ ๋น„๋™๊ธฐ ๋กœ๋“œ ์ˆ˜ํ–‰. ํ•ธ๋“ค ๋ฐ˜ํ™˜.
    ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ GC๋กœ ์ž๋™ ๊ด€๋ฆฌ. ํ•˜์ง€๋งŒ ์–ธ๋กœ๋“œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ๊ฐ€๋Šฅ. ํ•ธ๋“ค ํ•ด์ œ ๋ฐ ๋ช…์‹œ์  Addressables.Release ํ˜ธ์ถœ ํ•„์š”.

Unreal์—์„œ ๊ตฌํ˜„ํ•œ AssetManager

  • ๋™๊ธฐ ๋กœ๋“œ

    template<typename AssetType>
    AssetType* UPTAssetManager::GetAsset(const TSoftObjectPtr<AssetType>& AssetPointer, bool bKeepMemory)
    {
    	AssetType* LoadedAsset = nullptr;
    
    	const FSoftObjectPath& AssetPath = AssetPointer.ToSoftObjectPath();
    	if (AssetPath.IsValid())
    	{
    		LoadedAsset = AssetPointer.Get();
    		if (!LoadedAsset)
    		{
    			LoadedAsset = Cast<AssetType>(SynchronusLoadAsset(AssetPath));
    
    			//ensureAlwaysMsgf : ์‹คํ–‰ ์ค‘์ง€ํ•˜์ง€ ์•Š๊ณ  ์˜ค๋ฅ˜ ๋ณด๊ณ 
    			ensureAlwaysMsgf(LoadedAsset, TEXT("Failed to loaded asset [%s]"), *AssetPointer.ToString());
    
    			if (LoadedAsset && bKeepMemory)
    			{
    				//์—ฌ๊ธฐ์„œ AddLoadAsset์€ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผํ•˜๊ธฐ ์œ„ํ•œ ์žฅ์น˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ
    				// - ํ•œ๋ฒˆ ๋“ฑ๋ก๋˜๋ฉด ์ง์ ‘ ๋‚ด๋ฆฌ์ง€ ์•Š๋Š”ํ•œ Unloaded๊ฐ€ ๋˜์ง€ ์•Š์Œ(์บ์‹ฑ๋œ๋‹ค๋Š” ์˜๋ฏธ)
    				Get().AddLoadedAsset(Cast<UObject>(LoadedAsset));
    			}
    		}
    	}
    
    	return LoadedAsset;
    }
  • ๋น„๋™๊ธฐ ๋กœ๋“œ

    template <typename AssetType>
    void UPTAssetManager::GetAssetAsync(const TSoftObjectPtr<AssetType>& AssetPointer, TFunction<void(UObject*)> callback, bool bKeepInMemory)
    {
    	const FSoftObjectPath& AssetPath = AssetPointer.ToSoftObjectPath();
    	if (AssetPath.IsValid())
    	{
    		AssetType* LoadedAsset = nullptr;
    
    		LoadedAsset = AssetPointer.Get();
    		if (!LoadedAsset)
    		{
    			AsynchronusLoadAsset(AssetPath, [bKeepInMemory, callback](UObject* result)
    				{
    					if (result && bKeepInMemory)
    						Get().AddLoadedAsset(result);
    
    					callback(result);
    				});
    		}
    	}
    }
โš ๏ธ **GitHub.com Fallback** โš ๏ธ