Automatically update prefab instance

When you edit a value on a built-in component (for example a Trail Renderer), that value is updated automatically on all instances of that prefab.

For example, if I have a Prefab called MyPrefab with a Trail Renderer component added.

  • Change the variable Time of the component to 1.
  • Instantiate that prefab via drag & drop.
  • Name the new object MyGameObject.
  • Check that the variable Time on MyGameObject is 1.
  • Go back to MyPrefab and change the parameter Time of the Trail Renderer component to 5.
  • Check on MyGameObject that the Time variable is 5.

So it is automatically updated. And, when I edit some variable on MyGameObject, it is shown in bold.

How can I achieve the same functionality in my custom Editors? It doesn’t happen automatically.

I can get some of the functionality if I call PrefabUtility.ResetToPrefabState in my OnInspectorGUI function. But by doing that, the object remains locked: I can’t change values on MyGameObject, the values displayed are always the one from the Prefab.

Wel… I just call EditorUtility.SetDirty when I modify the GUI and that updates all the PrefabInstances.