From fbb9bff3c78ea7e4781cea70e10566e77bb6d156 Mon Sep 17 00:00:00 2001 From: hevinci Date: Sat, 25 Jun 2022 12:09:20 +0800 Subject: [PATCH] Remove AutoReleaseGameObjectHandle param. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除自动释放资源对象句柄的功能。 --- .../Runtime/AssetSystem/AssetSystem.cs | 35 +-------------- .../Handles/AssetOperationHandle.cs | 44 ------------------- Assets/YooAsset/Runtime/YooAssets.cs | 12 ++--- 3 files changed, 5 insertions(+), 86 deletions(-) diff --git a/Assets/YooAsset/Runtime/AssetSystem/AssetSystem.cs b/Assets/YooAsset/Runtime/AssetSystem/AssetSystem.cs index 9b17adc..d756027 100644 --- a/Assets/YooAsset/Runtime/AssetSystem/AssetSystem.cs +++ b/Assets/YooAsset/Runtime/AssetSystem/AssetSystem.cs @@ -10,12 +10,10 @@ namespace YooAsset { private static readonly List _loaders = new List(1000); private static readonly List _providers = new List(1000); - private static readonly HashSet _trackGameObjectHandles = new HashSet(); private static readonly Dictionary _sceneHandles = new Dictionary(100); + private static bool _simulationOnEditor; private static int _loadingMaxNumber; - - public static bool AutoReleaseGameObjectHandle { private set; get; } public static IDecryptionServices DecryptionServices { private set; get; } public static IBundleServices BundleServices { private set; get; } @@ -24,11 +22,10 @@ namespace YooAsset /// 初始化 /// 注意:在使用AssetSystem之前需要初始化 /// - public static void Initialize(bool simulationOnEditor, int loadingMaxNumber, bool autoReleaseGameObjectHandle, IDecryptionServices decryptionServices, IBundleServices bundleServices) + public static void Initialize(bool simulationOnEditor, int loadingMaxNumber, IDecryptionServices decryptionServices, IBundleServices bundleServices) { _simulationOnEditor = simulationOnEditor; _loadingMaxNumber = loadingMaxNumber; - AutoReleaseGameObjectHandle = autoReleaseGameObjectHandle; DecryptionServices = decryptionServices; BundleServices = bundleServices; } @@ -84,11 +81,6 @@ namespace YooAsset /// public static void UnloadUnusedAssets() { - if (AutoReleaseGameObjectHandle) - { - CheckAutoReleaseGameObjectHandle(); - } - if (_simulationOnEditor) { for (int i = _providers.Count - 1; i >= 0; i--) @@ -229,29 +221,6 @@ namespace YooAsset return provider.CreateHandle(); } - /// - /// 添加自动释放的游戏对象句柄 - /// - public static void AddAutoReleaseGameObjectHandle(AssetOperationHandle handle) - { - if (_trackGameObjectHandles.Contains(handle) == false) - _trackGameObjectHandles.Add(handle); - } - private static void CheckAutoReleaseGameObjectHandle() - { - List removeList = new List(); - foreach (var trackHandle in _trackGameObjectHandles) - { - trackHandle.CheckAutoReleaseHandle(); - if (trackHandle.IsValidNoWarning == false) - removeList.Add(trackHandle); - } - foreach (var removeHandle in removeList) - { - _trackGameObjectHandles.Remove(removeHandle); - } - } - internal static void UnloadSubScene(ProviderBase provider) { string providerGUID = provider.MainAssetInfo.ProviderGUID; diff --git a/Assets/YooAsset/Runtime/AssetSystem/Handles/AssetOperationHandle.cs b/Assets/YooAsset/Runtime/AssetSystem/Handles/AssetOperationHandle.cs index bf58a61..7083e3c 100644 --- a/Assets/YooAsset/Runtime/AssetSystem/Handles/AssetOperationHandle.cs +++ b/Assets/YooAsset/Runtime/AssetSystem/Handles/AssetOperationHandle.cs @@ -133,57 +133,13 @@ namespace YooAsset else result = UnityEngine.Object.Instantiate(Provider.AssetObject as GameObject, parent); } - - if (AssetSystem.AutoReleaseGameObjectHandle) - { - AddTrackGameObject(result); - } return result; } private InstantiateOperation InstantiateAsyncInternal(Vector3 position, Quaternion rotation, Transform parent, bool setPositionRotation) { InstantiateOperation operation = new InstantiateOperation(this, position, rotation, parent, setPositionRotation); OperationSystem.StartOperaiton(operation); - - if (AssetSystem.AutoReleaseGameObjectHandle) - { - operation.Completed += InstantiateOperationCompleted; - } return operation; } - - #region 资源对象句柄相关 - private readonly HashSet _trackGameObjects = new HashSet(); - private void InstantiateOperationCompleted(AsyncOperationBase obj) - { - if (obj.Status == EOperationStatus.Succeed) - { - var op = obj as InstantiateOperation; - AddTrackGameObject(op.Result); - } - } - private void AddTrackGameObject(GameObject go) - { - if (go != null) - { - _trackGameObjects.Add(go); - AssetSystem.AddAutoReleaseGameObjectHandle(this); - } - } - internal void CheckAutoReleaseHandle() - { - if (IsValidNoWarning == false) - return; - if (_trackGameObjects.Count == 0) - return; - - foreach (var go in _trackGameObjects) - { - if (go != null) - return; - } - ReleaseInternal(); - } - #endregion } } \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/YooAssets.cs b/Assets/YooAsset/Runtime/YooAssets.cs index 9a4e0fd..4808580 100644 --- a/Assets/YooAsset/Runtime/YooAssets.cs +++ b/Assets/YooAsset/Runtime/YooAssets.cs @@ -40,12 +40,6 @@ namespace YooAsset /// public bool LocationToLower = false; - /// - /// 自动释放游戏对象所属资源句柄 - /// 说明:通过资源句柄实例化的游戏对象在销毁之后,会自动释放所属资源句柄。 - /// - public bool AutoReleaseGameObjectHandle = false; - /// /// 资源定位服务接口 /// @@ -214,7 +208,7 @@ namespace YooAsset { _editorSimulateModeImpl = new EditorSimulateModeImpl(); _bundleServices = _editorSimulateModeImpl; - AssetSystem.Initialize(true, parameters.AssetLoadingMaxNumber, parameters.AutoReleaseGameObjectHandle, parameters.DecryptionServices, _bundleServices); + AssetSystem.Initialize(true, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices); var editorSimulateModeParameters = parameters as EditorSimulateModeParameters; initializeOperation = _editorSimulateModeImpl.InitializeAsync( editorSimulateModeParameters.LocationToLower, @@ -224,14 +218,14 @@ namespace YooAsset { _offlinePlayModeImpl = new OfflinePlayModeImpl(); _bundleServices = _offlinePlayModeImpl; - AssetSystem.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.AutoReleaseGameObjectHandle, parameters.DecryptionServices, _bundleServices); + AssetSystem.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices); initializeOperation = _offlinePlayModeImpl.InitializeAsync(parameters.LocationToLower); } else if (_playMode == EPlayMode.HostPlayMode) { _hostPlayModeImpl = new HostPlayModeImpl(); _bundleServices = _hostPlayModeImpl; - AssetSystem.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.AutoReleaseGameObjectHandle, parameters.DecryptionServices, _bundleServices); + AssetSystem.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices); var hostPlayModeParameters = parameters as HostPlayModeParameters; initializeOperation = _hostPlayModeImpl.InitializeAsync( hostPlayModeParameters.LocationToLower,