From f2d9751c92e30e8ee482951b6d272809759bad4a Mon Sep 17 00:00:00 2001 From: Fernando Cortez Date: Mon, 20 May 2024 19:25:14 -0400 Subject: [PATCH 1/2] releasing Addressables handle on OnDestroy --- .../Assets/Scripts/00_Preloading/Preloading.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) 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); + } } } From e9af2048ec39e5a55070f3188d7d6049a95ea6ef Mon Sep 17 00:00:00 2001 From: Fernando Cortez Date: Tue, 21 May 2024 14:27:07 -0400 Subject: [PATCH 2/2] changelog addition --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) 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