unity data_error ai_generated true

SerializationException: Reference to ScriptableObject 'MyData' is broken or the object has been destroyed

ID: unity/scriptableobject-serialization-ref

Also available as: JSON · Markdown · 中文
80%Fix Rate
85%Confidence
1Evidence
2024-02-10First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
Unity 2021.3 active
Unity 2022.3 active
Unity 2023.1 active

Root Cause

A ScriptableObject reference in a MonoBehaviour or another ScriptableObject points to a destroyed or missing asset, often due to asset deletion, reimport, or scene unload.

generic

中文

MonoBehaviour或另一个ScriptableObject中的ScriptableObject引用指向了已销毁或缺失的资源,通常是由于资源删除、重新导入或场景卸载导致。

Official Documentation

https://docs.unity3d.com/ScriptReference/ScriptableObject.html

Workarounds

  1. 85% success In the Inspector, locate the component with the broken reference and reassign the ScriptableObject asset from the Project window. If the asset is missing, recreate it (e.g., Assets > Create > MyData) and reassign.
    In the Inspector, locate the component with the broken reference and reassign the ScriptableObject asset from the Project window. If the asset is missing, recreate it (e.g., Assets > Create > MyData) and reassign.
  2. 75% success Use a custom Editor script to find and fix broken references: iterate over all serialized properties in the scene and check for missing assets using AssetDatabase.TryGetGUIDAndLocalFileIdentifier.
    Use a custom Editor script to find and fix broken references: iterate over all serialized properties in the scene and check for missing assets using AssetDatabase.TryGetGUIDAndLocalFileIdentifier.

中文步骤

  1. In the Inspector, locate the component with the broken reference and reassign the ScriptableObject asset from the Project window. If the asset is missing, recreate it (e.g., Assets > Create > MyData) and reassign.
  2. Use a custom Editor script to find and fix broken references: iterate over all serialized properties in the scene and check for missing assets using AssetDatabase.TryGetGUIDAndLocalFileIdentifier.

Dead Ends

Common approaches that don't work:

  1. 50% fail

    Calling Resources.UnloadUnusedAssets() can destroy ScriptableObject references if they are not properly referenced, making the issue worse.

  2. 40% fail

    Simply saving the scene does not fix a broken reference; the actual asset must be reassigned.