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
- Crash when trying to force Shader to interpret 1/30 as a floating point operation
- Terrain is flickering when adjusting "Compatibility Mode" and "Use Rendering Layers" Settings
- Isometric tiles are flickering and overlapping each other when entering Play Mode with Tilemap Renderer mode set to "Chunk"
- Crash on ParticleSystemParticles::array_reserve when particle system starts
- Docking Text Property Preview Window next to UI Builder breaks the window and causes NullReferenceException
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.