Search Issue Tracker

Won't Fix

Votes

2

Found in

2017.4

2018.4

2019.2

2019.2.4f1

2019.3

2020.1

Issue ID

1198350

Regression

No

Field Serialization in OnValidate method fails due to not being properly marked as dirty

Scene Management

-

How to reproduce:
1. Open attached project "Unity Bug With Dirty Data.zip" and scene "SampleScene"
2. In Hierarchy select "Move Right Prefabbed - Autopopulate"
3. In Inspector check that the "MoveRightAutoPopulate" -> "My RB" value is not null
4. Enter Play mode
5. Observe the red cubes and "MoveRightAutoPopulate" -> "My RB" value

Expected result: all the red cubes are moving and the "My RB" value is not null
Actual result: one of the red cubes is not moving and the "My RB" value is null

Reproducible with: 2017.4.35f1, 2018.4.13f1, 2019.2.14f1, 2019.3.0f1, 2020.1.0a14

Workaround:
In OnValidate method, force to serialize the gameobject with
UnityEditor.EditorUtility.SetDirty(this);

  1. Resolution Note:

    Accessing other objects and marking scenes dirty during OnValidate has undefined behavior and should be avoided. OnValidate is only allowed access the object it is called on.

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.