๐ Addressable
์์ง ๊ณต๋ถ๊ฐ ๋ง์ด ํ์ํ ์์ญ์ธ ๊ฒ ๊ฐ์ง๋ง
์ผ๋จ ํ์
์์ ๋ํ์ ์ผ๋ก ์ฐ์ด๋ ๋ฆฌ์์ค ๊ด๋ฆฌ ์์คํ
์ด๋ผ๊ณ ํ๋ ์ง์ ์จ๋ณด๋ฉด์ ์์๊ฐ๋ณด๋๋ก ํด์ผ๊ฒ ๋ค.
์ด๋๋ ์๋ธ(Addressables)๋ Unity ์์ง์์ ์ ๊ณตํ๋ ์์ฐ ๊ด๋ฆฌ ์์คํ ์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฒ์ ๊ฐ๋ฐ์๋ ์์ฐ(์ด๋ฏธ์ง, ์ค๋์ค, ํ๋ฆฌํน ๋ฑ)์ ํจ์จ์ ์ผ๋ก ๋ก๋ํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋๋ ์๋ธ ์์คํ ์ ์์ฐ์ ์ฃผ์๋ฅผ ํตํด ์ฐธ์กฐํ ์ ์๊ฒ ํ์ฌ, ๋น๋ ํ๋ก์ธ์ค์ ๋ฐํ์ ๋์ ์์ฐ์ ๋ ์ ์ฐํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ํฉ๋๋ค.
์ด๋๋ ์๋ธ์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ์ฃผ์ ๊ธฐ๋ฐ ์ ๊ทผ: ์์ฐ์ ์ฃผ์๋ก ์ฐธ์กฐํ์ฌ, ์ฝ๋๋ฅผ ๋จ์ํํ๊ณ ์์ฐ ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
2. ๋์ ๋ก๋ฉ: ํ์ํ ๋ ์์ฐ์ ๋ก๋ํ๊ณ , ์ฌ์ฉํ์ง ์์ ๋ ์ธ๋ก๋ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํฉ๋๋ค.
3. ๋น๋ ๋ฐ ๋ฐฐํฌ ์ต์ ํ: ์์ฐ ๋ฒ๋ค์ ์๋์ผ๋ก ์์ฑํ๊ณ , ์ด๋ฅผ ์ด์ฉํด ๊ฒ์์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ด๋ฉฐ, ํจ์น ํฌ๊ธฐ๋ฅผ ์ต์ํํ ์ ์์ต๋๋ค.
4. ๋ฉํฐ ํ๋ซํผ ์ง์: ๋ค์ํ ํ๋ซํผ์์ ์ผ๊ด๋ ์์ฐ ๋ก๋ฉ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๋๋ ์๋ธ์ ์ฌ์ฉํ๋ฉด ์์ฐ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ์ค์ด๊ณ , ๊ฒ์์ ์ฑ๋ฅ๊ณผ ์ ์ฐ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๊ฒ ๋ฉ๋๋ค.
GPT ์ ์๊ป์ ๋งํ๋ ์ด๋๋ ์๋ธ ์ด๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
- ๋จผ์ ํจํค์ง๋ฅผ ์ค์นํ๋ค.
- Unity Editor - Window - Package Manager - Unity Registry - Addressables
- ์ด๋๋ ์๋ธ ๊ทธ๋ฃน์ฐฝ์ ์ฐ๋ค.
- Unity Editor - Window - Asset Management - Addressables - Groups
- ํ๋ฆฌํน์์ Addressable ์ฒดํฌ๋ฅผ ํ๊ฑฐ๋
- ๋๋๊ทธ ๋๋กญ์ผ๋ก ๋ฑ๋ก ๊ฐ๋ฅํ๋ค
์ด๋๋ ์๋ธ์ ์ด๋ฆ์์๋ ์ ์ ์๋ฏ์ด ์ฃผ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ฌ์ฉํ๋๋ฐ ๊ทธ ์ฃผ์๋ก Key(Addressable Name)๋ฅผ ์ฌ์ฉํ๋ค.
์ง๊ธ์ Key๊ฐ ๋๋ฌด ๊ธธ๊ธฐ ๋๋ฌธ์ ์ข ์ค์ด๋๋กํ๋ค.
๋ํ ๊ทธ๋ฃน์ ๋ฐ๋ก ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๊ทธ๋ฃน์ ์์ฑํด ๊ทธ๊ณณ์ผ๋ก ์ฎ๊ธด๋ค.
Resources์ Addressable์ ์ฐจ์ด์ ์ค ํ๋๋ก
Resources๋ฐฉ์์ ๋ฐ๋์ Resources ํด๋ ๋ด์ ์์ ์ด ์์ด์ผ ํ์ง๋ง,
Addressable๋ฐฉ์์ ์์ ์ด ์ด๋์ ์๋ ์ฃผ์๋ก ์ฐธ์กฐ๋ฅผ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ถ์ ์ด ๊ฐ๋ฅํ๋ค.
์ค์ ์ ์ข ๋ ๊ฑด๋๋ ค์ผ ํ๋ ๋ถ๋ถ์ด ์์์ง๋ง
์ด์ ๋๋ง ํ๋๋ผ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ๊ฐ ๋์๋ค.
์ค์ ์ฌ์ฉ
using UnityEngine.AddressableAssets;
1์ผ 1๊ตฌํ์์ ์ฃผ๋ก Addressables ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฒ ๋ ํ ๋ฐ ๋ฐ์๋ ์ธ๊ธ ๋ AssetReference๋ ๋ง์ฐฌ๊ฐ์ง๋ก
UnityEngine.AddressableAssets ๋ค์ ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค. (์์ฆ์ ์๋์์ฑ์ด ์ ๋ผ ์์ผ๋ ๋ญ...)
๊ทธ๋ฆฌ๊ณ ์ด๋๋ ์๋ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐ ๋ฐฉ์์ ์ง์ํ์ง ์๋๋ค. ์ฆ ์ ๋ถ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํด์ผํ๋ค.
ํ์ํ ๋ ๋ฆฌ์์ค๋ฅผ ๋ก๋, ์ฌ์ฉํ์ง ์์ ๋ ์ธ๋ก๋
์ฃผ์ ๊ธฐ๋ฅ ์ค ํ๋์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ต์ ํ๋ฅผ ํ ์ ์๋๋ก ์ฌ์ฉํ์ง ์๋ ๋ฆฌ์์ค๋ ์ธ๋ก๋๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ ์ ์๋ค.
public class AddressableTester : MonoBehaviour
{
[SerializeField] AssetReference aRef;
GameObject go;
private void Start()
{
aRef.InstantiateAsync().Completed +=
(op) =>
{
go = op.Result;
Invoke("ReleaseGO", 5f);
};
}
private void ReleaseGO()
{
aRef.ReleaseInstance(go);
}
private void NextScene()
{
SceneManager.LoadScene("TestScene");
}
}
ํ ์คํธ๋ฅผ ์ํด ์ค๋นํ ์ฝ๋์ด๋ค.
- AssetReference : ์ด๋๋ ์๋ธ์ ๋ฑ๋ก๋์ด์๋ ์ค๋ธ์ ํธ ์ฐธ์กฐ์ด๋ค.
- AssetReference.instantiateAsync() : ์ด๋๋ ์๋ธ์ ์ฌ์ฉํ Instantiate์ด๋ค.
- ๋น๋๊ธฐ ๋ฐฉ์์ด๋ค ๋ณด๋ Completed์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฑ๋ก์ํฌ ์ ์๋ค.
- ํ์ฌ๋ GameObject ์ ์ญ ๋ณ์์ ์์ฑ๋ ์ค๋ธ์ ํธ๋ฅผ ํ ๋นํ๋ค.
- AssetReference.ReleaseInstance(GameObject) : ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ GameObject๋ฅผ ์ ๊ฑฐ ๋ฐ ์ธ๋ก๋ ํ๋ค.
- ์ธ๋ก๋ ํ์ ๋์ ์ ํ๊ณ ์ฌ์ ๊ทธ๋ฅ ๋์ด๊ฐ์ ๋ ์ฐจ์ด๋ฅผ ๋ณด๊ธฐ์ํด NextScene ๋ฉ์๋๋ฅผ ์ค๋นํ๋ค.
ํ์ธ์ ์ํด ์ด๋๋ ์๋ธ ์ ์ฉ ํ๋กํ์ผ๋ฌ๋ฅผ ์ผ ๋ค
Window - Asset Management - Addressables - Event Viewer
๋จ, ํ๋กํ์ผ๋ฌ์์ ํ์ธํ๊ธฐ ์ํด์ ์ด๋๋ ์๋ธ ์ธํ ์ Send Profiler Events ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฒดํฌํด์ผํ๋ค.
ํ๋ฆฌํน์ ์ฐธ์กฐํ๊ณ ํ์ธํด๋ณด์
ํ ์คํธ ์ค๋ธ์ ํธ๊ฐ ํ์ด์ด๋ผํค์ฐฝ์ ์ฌ๋ผ์๊ณ
ํ๋กํ์ผ๋ฌ์๋ ๋์์๋ค.
5์ด ๋ค ์ค๋ธ์ ํธ๊ฐ ์ ๊ฑฐ๋๊ณ ํ๋กํ์ผ๋ฌ ์์์๋ ์ธ๋ก๋ ๋์์์ ํ์ธํ๋ค.
์ด๋ฒ์ Inovke ํจ์๋ฅผ NextScene ๋ฉ์๋๋ก ๋ณ๊ฒฝํด๋ณด์.
์ฒ์์ ๊ฐ๋ค.
๊ทธ๋ฌ๋ ์ฌ์ด ๋ณ๊ฒฝ๋ ํ ์ค๋ธ์ ํธ ์์ฒด๋ ์ฌ๋ผ์ก์ง๋ง
์ด๋ฏธ ์ฌ๋ผ์จ ๋ฆฌ์์ค๋ ํด์ ๋์ง ์์์ ์ ์ ์๋ค.
์ฆ ์ด๋๋ ์๋ธ์ ์ฌ์ฉํ๋ฉด ํ์ํ ๋ฆฌ์์ค๋ง ๋ก๋์ํฌ ์ ์์ง๋ง ๊ด๋ฆฌ๋ฅผ ์ข ๋ ์ธ์ฌํ๊ฒ ํด์ผ ํ๋ค๋ ๋ป์ด๋ค.
์ด๋ฒ ํฌ์คํ ์ ์ฌ๊ธฐ๊น์ง๋ง ์ ๊ณ ๋ก์ปฌ์ ๋๋จธ์ง๋ [1์ผ 1 ๊ตฌํ]์์ ์์ฑํด์ผ๊ฒ ๋ค.
LoadAsync ๊ธฐ๋ฅ๋ ์จ๋ด์ผ ํ๊ณ ์๋ฒ๋ ์จ๋ด์ผํ๋ ์ดํ ๋ด์ฉ์ ์ข ๋ ๊ณต๋ถํด์ ๋ค์ ์์ฑ์ ํ ์์ .
'Unity' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[RequireComponent] (0) | 2024.06.06 |
---|---|
[RuntimeInitializeOnLoadMethod] (0) | 2024.06.05 |
Culling (์ต์ ํ) (0) | 2024.05.09 |