E4-Unity / contents-download-test

컨텐츠 다운로드 기능 구현 테스트
MIT License
0 stars 0 forks source link

에셋 번들 언로드 테스트 #3

Open Eu4ng opened 10 months ago

Eu4ng commented 10 months ago

에셋 번들 언로드 테스트

참고

설명

에셋 번들에 존재하는 다른 에셋이 사용 중에는 사용하지 않는 특정 에셋만 부분 언로드가 불가능합니다. 이를 테스트 해보았습니다.

테스트 환경

Unity Editor : 2022.3.13f1 Addressables : v1.21.19

Default Local Group

image

Eu4ng commented 10 months ago

성공하는 경우

테스트 스크립트

  1. Player 프리팹 인스턴스 스폰
  2. Player 프리팹 인스턴스 파괴
  3. Enemy 프리팹 인스턴스 스폰
using UnityEngine;
using UnityEngine.AddressableAssets;

public class PlayerSpawner : MonoBehaviour
{
    [SerializeField] AssetReferenceGameObject m_Player;
    [SerializeField] AssetReferenceGameObject m_Enemy;

    void Start()
    {
        // Player 스폰 후 파괴
        var player = Addressables.InstantiateAsync(m_Player).WaitForCompletion();
        Addressables.ReleaseInstance(player);

        // Enemy 스폰
        var enemy = Addressables.InstantiateAsync(m_Enemy).WaitForCompletion();
    }
}

결과

Player 프리팹 인스턴스가 스폰 즉시 파괴된 이후 Enemy 프리팹 인스턴스가 스폰된 상황입니다. Player 프리팹 인스턴스가 파괴되었을 때 Enemy 프리팹은 사용되지 않았기 때문에 정상적으로 에셋 번들이 언로드 됩니다.

image

Eu4ng commented 10 months ago

실패하는 경우

테스트 스크립트

  1. Player 프리팹 인스턴스 스폰
  2. Enemy 프리팹 인스턴스 스폰
  3. Player 프리팹 인스턴스 파괴
using UnityEngine;
using UnityEngine.AddressableAssets;

public class PlayerSpawner : MonoBehaviour
{
    [SerializeField] AssetReferenceGameObject m_Player;
    [SerializeField] AssetReferenceGameObject m_Enemy;

    void Start()
    {
        // Player 스폰
        var player = Addressables.InstantiateAsync(m_Player).WaitForCompletion();

        // Enemy 스폰
        var enemy = Addressables.InstantiateAsync(m_Enemy).WaitForCompletion();

        // Player 파괴
        Addressables.ReleaseInstance(player);
    }
}

결과

Player , Enemy 프리팹 인스턴스가 스폰된 이후 Player 프리팹 인스턴스를 파괴한 경우입니다. 아직 Enemy 프리팹 인스턴스는 파괴되지 않았기 때문에 Player 프리팹 인스턴스가 파괴될 때 에셋 번들이 언로드되지 않습니다.

image

하지만 동일한 상황에서 Bundle ModePack Separately 로 변경한다면 Player 프리팹은 언로드됩니다. Player 프리팹과 Enemy 프리팹은 동일한 그룹에 속해있지만 서로 다른 에셋 번들로 패키징되기 때문입니다.

image

image