Search Issue Tracker
By Design
Votes
0
Found in
2021.3.33f1
2022.3.15f1
2023.2.4f1
2023.3.0a18
Issue ID
UUM-58389
Regression
No
ScriptableObject.OnDestroy is not called after Respouces.UnloadUnusedAssets
Reproduction steps:
- Open the attached “ScriptableObjectTest.zip” project
- Open the “Assets/Scenes/NewScene.unity”
- Enter the Play Mode
- Observe the Console window
Expected result: 2 logs are outputted as the OnDestroy method is called on both the GameObject and ScriptableObject
Actual result: Only a single log from the GameObject’s OnDestroy call is outputted
Reproducible with: 2021.3.33f1, 2022.3.15f1, 2023.2.4f1, 2023.3.0a18
Reproducible on: M1 MacOS 14.0
Not reproducible on: No other environment tested
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- Mono Windows Builds don't produce full log callstacks when generating logs
- AssetBundles fail to load when running in Built Players for Mobile Devices
- UI elements with text gets bigger and grey when Player window is moved to another screen with different resolution
- System name accepts multiline text but crops it on confirmation, duplicates input, and shrinks the field when empty
- UI element scale and position are wrong in project build when DRS is changed with HDR and Software Dynamic Resolution enabled
Resolution Note:
This is a by-design behavior. Calling Destroy inside the OnDestroy callback means the object will be Destroyed in the next frame. However, UnloadUnusedAssets picks that object (since nothing holds it) and garbage collects it with other unused objects.
Workaround: Call DestroyImmediate() inside the OnDestroy to ensure the object will be destroyed before it is garbage collected.