diff --git a/Basic/DynamicAddressablesNetworkPrefabs/Assets/Scripts/00_Preloading/Preloading.cs b/Basic/DynamicAddressablesNetworkPrefabs/Assets/Scripts/00_Preloading/Preloading.cs index 94d53084e..892c2e5b8 100644 --- a/Basic/DynamicAddressablesNetworkPrefabs/Assets/Scripts/00_Preloading/Preloading.cs +++ b/Basic/DynamicAddressablesNetworkPrefabs/Assets/Scripts/00_Preloading/Preloading.cs @@ -3,6 +3,7 @@ using Unity.Netcode; using UnityEngine; using UnityEngine.AddressableAssets; +using UnityEngine.ResourceManagement.AsyncOperations; namespace Game.Preloading { @@ -24,6 +25,8 @@ public sealed class Preloading : MonoBehaviour [SerializeField] NetworkManager m_NetworkManager; + AsyncOperationHandle m_AsyncOperationHandle; + async void Start() { await PreloadDynamicPlayerPrefab(); @@ -35,9 +38,8 @@ async void Start() async Task PreloadDynamicPlayerPrefab() { Debug.Log($"Started to load addressable with GUID: {m_DynamicPrefabReference.AssetGUID}"); - var op = Addressables.LoadAssetAsync(m_DynamicPrefabReference); - var prefab = await op.Task; - Addressables.Release(op); + m_AsyncOperationHandle = Addressables.LoadAssetAsync(m_DynamicPrefabReference); + var prefab = await m_AsyncOperationHandle.Task; //it's important to actually add the player prefab to the list of network prefabs - it doesn't happen //automatically @@ -51,8 +53,13 @@ async Task PreloadDynamicPlayerPrefab() // prefabs to NetworkManager's NetworkPrefabs list pre-connection time guarantees that all players will have // matching NetworkConfigs. This is why NetworkManager.ForceSamePrefabs is set to true. We let Netcode for // GameObjects validate the matching NetworkConfigs between clients and the server. If this is set to false - // on the server, clients may join with a mismatching NetworkPrefabs list from the server. + // on the server, clients may join with a mismatching NetworkPrefabs list from the server. m_NetworkManager.NetworkConfig.ForceSamePrefabs = true; } + + void OnDestroy() + { + Addressables.Release(m_AsyncOperationHandle); + } } } diff --git a/CHANGELOG.md b/CHANGELOG.md index e203ef55f..e54c2a432 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,9 @@ - Upgraded to Unity 2022.3.27f1 (#176) - com.unity.transport upgraded to v1.4.1 +#### Fixed +- Releasing an Addressables handle on OnDestroy inside Preloading scene to prevent releasing loaded dynamic prefab from memory (#179) + ### Invaders #### Changed