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

  1. 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.

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.