What's new for Prefabs in 2022.2?

Hi everyone,

It’s time for an update from the Scene Management team and the work we have been doing on Prefabs. During the last few releases, and after fixing a large number of bugs you’ve reported (thank you!), we’ve made several improvements to the Prefab system.

Our article What’s new for Prefabs in 2022.2? will show the improvements introduced in 2022.2 and how these updates can benefit you.

In this article, we’ll be covering:

  • Replace Prefab Asset for Prefab instance

  • Reorder added GameObjects and components

  • Delete GameObjects from Prefab instances

  • Explore improved override tooling

Many of the new features have been requested by you and we hope they will be welcome additions to the existing Prefab workflows.

Questions, comments, and suggestions are all welcome.

15 Likes

Thanks a lot, those are really amazing helpful additions :slight_smile:

Can you say something about another long-awaited feature: Prefab Exposed Properties. So we can disable any override and allow overriding only some explicitly marked properties from prefab hierarchy and show all of them in prefab root inspector?

1 Like

Hi Jes,
I hate to be the bearer of bad news: we have worked on a prototype for encapsulation and exposed properties but have decided to shelf it for the time being due to new priorities. That said, the idea is not abandoned.

1 Like

Unity continues to follow the path of replacing popular plugins with built-in tools. Thank you

3 Likes

Really good we finally have an option to replace a prefab instance. I’ve always had to make a custom tool for this for no good reason. Being able to see inheritance tree for variants? Great! Next step: adding a dependency tree tool for viewing all asset relationships.

Good improvements, thanks!

2 Likes

Am I the only one having trouble watching blog post videos that hosted in Untity’s own server?

1 Like

I have the video issues too.

For years we had problems with inserting a new prefab in the middle of prefabs variants inheritance chain.
Was this issue addressed ?

I have no need for exposed properties, but some form of locking in the scene view would be incredible. The number of times someone on the team accidentally adds an override to a prefab is incredibly high. One of our biggest sources of level design bugs.

8 Likes

First of all, this is a great update. But also, I noticed the blog post mentions “major refactoring of the Undo system”. My latest 2022.1 editor crashes nowadays daily deep in some undo internals randomly. Didn’t use to do that before jumping to 2022.1. So if at all related, I really hope you can devote some serious time now to get the undo bugs worked out too. There’s been way too many lately. I can’t really make a reliable bug report of this as it’s so random, but here’s some example stack traces under spoiler tags. (There’s also the undo bugs ones already in the issue system, like undo getting child ordering wrong etc. which need a lot of love.)

Received signal SIGSEGV
Obtained 15 stack frames
0x00007ff780843614 (Unity) tlsf_free
0x00007ff77e69937e (Unity) DynamicHeapAllocator::smile:eallocate
0x00007ff77e6a7860 (Unity) DualThreadAllocator<DynamicHeapAllocator>::TryDeallocate
0x00007ff77e699b12 (Unity) MemoryManager::smile:eallocate
0x00007ff77e6a272a (Unity) free_alloc_internal
0x00007ff77fccec33 (Unity) UndoManager::RegisterUndoOperation
0x00007ff77fcce77f (Unity) UndoManager::RegisterUndoInternal
0x00007ff77fcce586 (Unity) UndoManager::RegisterUndo
0x00007ff77fcb6d56 (Unity) PropertyUndoManager::Flush
0x00007ff77f980fb9 (Unity) Application::TickTimer
0x00007ff77fde759a (Unity) MainMessageLoop
0x00007ff77fdec3b4 (Unity) WinMain
0x00007ff78116448e (Unity) __scrt_common_main_seh
0x00007ffa07c874b4 (KERNEL32) BaseThreadInitThunk
0x00007ffa07f626a1 (ntdll) RtlUserThreadStart

called a function with an invalid parameter
Obtained 21 stack frames
0x00007ff71264f9fd (Unity) StackWalker::GetCurrentCallstack
0x00007ff7126566f9 (Unity) StackWalker::ShowCallstack
0x00007ff7135f1943 (Unity) GetStacktrace
0x00007ff712655736 (Unity) winutils::PrintStackTrace
0x00007ff71264eb21 (Unity) winutils::CrashHandler::smile:efaultInvalidParameterHandler
0x00007ff7149a28d1 (Unity) invalid_parameter_internal
0x00007ff7149a2826 (Unity) invalid_parameter
0x00007ff7149a2979 (Unity) invalid_parameter_noinfo_noreturn
0x00007ff7134d343f (Unity) UndoBase::~UndoBase
0x00007ff7134d3654 (Unity) UndoBase::`vector deleting destructor'
0x00007ff7134dbff0 (Unity) UndoManager::PopFrontIfExceedsLimit
0x00007ff7134deba5 (Unity) UndoManager::RegisterUndoOperation
0x00007ff7134de77f (Unity) UndoManager::RegisterUndoInternal
0x00007ff7134de586 (Unity) UndoManager::RegisterUndo
0x00007ff7134c6d56 (Unity) PropertyUndoManager::Flush
0x00007ff713190fb9 (Unity) Application::TickTimer
0x00007ff7135f759a (Unity) MainMessageLoop
0x00007ff7135fc3b4 (Unity) WinMain
0x00007ff71497448e (Unity) __scrt_common_main_seh
0x00007ffa07c874b4 (KERNEL32) BaseThreadInitThunk
0x00007ffa07f626a1 (ntdll) RtlUserThreadStart

Received signal SIGSEGV
Obtained 11 stack frames
0x00007ff6713b77ab (Unity) core::StringStorageDefault<char>::assign
0x00007ff6730ca85d (Unity) UndoManager::GetPriorityName
0x00007ff6730d1072 (Unity) UndoManager::UpdateUndoName
0x00007ff672d6dd0a (Unity) PlayerLoopController::ExitPlayMode
0x00007ff672d7d784 (Unity) PlayerLoopController::SetIsPlaying
0x00007ff672d80e80 (Unity) Application::TickTimer
0x00007ff6731e759a (Unity) MainMessageLoop
0x00007ff6731ec3b4 (Unity) WinMain
0x00007ff67456448e (Unity) __scrt_common_main_seh
0x00007ffad6f774b4 (KERNEL32) BaseThreadInitThunk
0x00007ffad71426a1 (ntdll) RtlUserThreadStart

Received signal SIGSEGV
Obtained 117 stack frames
0x00007ff6730c6b03 (Unity) UndoManager::ClearUndoSceneHandle
0x00007ff673063df7 (Unity) EditorSceneManager::ClosePreviewScene
0x00007ff6716ea53f (Unity) EditorSceneManager_CUSTOM_ClosePreviewScene_Injected
0x000001c73a01c00a (Mono JIT Code) (wrapper managed-to-native) UnityEditor.SceneManagement.EditorSceneManager:ClosePreviewScene_Injected (UnityEngine.SceneManagement.Scene&)
0x000001c73a01bf33 (Mono JIT Code) UnityEditor.SceneManagement.EditorSceneManager:ClosePreviewScene (UnityEngine.SceneManagement.Scene)
0x000001c73a01bdd3 (Mono JIT Code) UnityEditor.PreviewScene:smile:ispose ()
0x000001c73a01bd33 (Mono JIT Code) UnityEditor.PreviewRenderUtility:Cleanup ()
0x000001c73a01bc23 (Mono JIT Code) UnityEditor.Texture3DPreview:OnDisable ()
0x000001c3cf669018 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)
0x00007ffa0fe30384 (mono-2.0-bdwgc) [mini-runtime.c:3445] mono_jit_runtime_invoke
0x00007ffa0fd6eb34 (mono-2.0-bdwgc) [object.c:3066] do_runtime_invoke
0x00007ffa0fd6eccc (mono-2.0-bdwgc) [object.c:3113] mono_runtime_invoke
0x00007ff672163f14 (Unity) scripting_method_invoke
0x00007ff672143864 (Unity) ScriptingInvocation::Invoke
0x00007ff67214394e (Unity) ScriptingInvocation::InvokeChecked
0x00007ff6721d8d66 (Unity) SerializableManagedRef::CallMethod
0x00007ff67213db7f (Unity) MonoBehaviour::WillDestroyComponent
0x00007ff671df1f6b (Unity) DestroyObjectHighLevel_Internal
0x00007ff671df1bc4 (Unity) DestroyObjectHighLevel
0x00007ff67214226e (Unity) Scripting::smile:estroyObjectFromScriptingImmediate
0x00007ff671356364 (Unity) Object_CUSTOM_DestroyImmediate
0x000001c3ce5e0625 (Mono JIT Code) (wrapper managed-to-native) UnityEngine.Object:smile:estroyImmediate (UnityEngine.Object,bool)
0x000001c3ce5e0563 (Mono JIT Code) UnityEngine.Object:smile:estroyImmediate (UnityEngine.Object)
0x000001c73a01b93b (Mono JIT Code) UnityEditor.TextureInspector:OnDisable ()
0x000001c3cf669018 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)
0x00007ffa0fe30384 (mono-2.0-bdwgc) [mini-runtime.c:3445] mono_jit_runtime_invoke
0x00007ffa0fd6eb34 (mono-2.0-bdwgc) [object.c:3066] do_runtime_invoke
0x00007ffa0fd6eccc (mono-2.0-bdwgc) [object.c:3113] mono_runtime_invoke
0x00007ff672163f14 (Unity) scripting_method_invoke
0x00007ff672143864 (Unity) ScriptingInvocation::Invoke
0x00007ff67214394e (Unity) ScriptingInvocation::InvokeChecked
0x00007ff6721d8d66 (Unity) SerializableManagedRef::CallMethod
0x00007ff67213db7f (Unity) MonoBehaviour::WillDestroyComponent
0x00007ff671df1f6b (Unity) DestroyObjectHighLevel_Internal
0x00007ff671df1bc4 (Unity) DestroyObjectHighLevel
0x00007ff67214226e (Unity) Scripting::smile:estroyObjectFromScriptingImmediate
0x00007ff671356364 (Unity) Object_CUSTOM_DestroyImmediate
0x000001c3ce5e0625 (Mono JIT Code) (wrapper managed-to-native) UnityEngine.Object:smile:estroyImmediate (UnityEngine.Object,bool)
0x000001c3ce5e0563 (Mono JIT Code) UnityEngine.Object:smile:estroyImmediate (UnityEngine.Object)
0x000001c41aefa33b (Mono JIT Code) UnityEditor.AssetPreviewUpdater:CreatePreview (UnityEngine.Object,UnityEngine.Object[],string,int,int)
0x000001c41aefa003 (Mono JIT Code) UnityEditor.AssetPreviewUpdater:CreatePreviewForAsset (UnityEngine.Object,UnityEngine.Object[],string)
0x000001c41aefa0c0 (Mono JIT Code) (wrapper runtime-invoke) <Module>:runtime_invoke_object_object_object_object (object,intptr,intptr,intptr)
0x00007ffa0fe30384 (mono-2.0-bdwgc) [mini-runtime.c:3445] mono_jit_runtime_invoke
0x00007ffa0fd6eb34 (mono-2.0-bdwgc) [object.c:3066] do_runtime_invoke
0x00007ffa0fd6eccc (mono-2.0-bdwgc) [object.c:3113] mono_runtime_invoke
0x00007ff672163f14 (Unity) scripting_method_invoke
0x00007ff672143864 (Unity) ScriptingInvocation::Invoke
0x00007ff6734c717c (Unity) MonoCreateAssetPreview
0x00007ff6734d18ca (Unity) MonoCreateAssetPreviewDontUnload
0x00007ff6734d46ff (Unity) PreviewTextureManager::UpdatePreviewIfDirty
0x00007ff6734cf1b5 (Unity) PreviewTextureManager::GetPreview
0x00007ff6719d3941 (Unity) AssetPreview_CUSTOM_GetAssetPreview
0x000001c41aebcc45 (Mono JIT Code) (wrapper managed-to-native) UnityEditor.AssetPreview:GetAssetPreview (int,int)
0x000001c41aebcb8b (Mono JIT Code) UnityEditor.AssetPreview:GetAssetPreview (int)
0x000001c41aebcb33 (Mono JIT Code) UnityEditor.AssetPreview:GetAssetPreview (UnityEngine.Object)
0x000001c73a01727b (Mono JIT Code) UnityEditor.EditorGUI:smile:rawObjectFieldLargeThumb (UnityEngine.Rect,int,UnityEngine.Object,UnityEngine.GUIContent)
0x000001c41aed5f4b (Mono JIT Code) UnityEditor.EditorGUI:smile:oObjectField (UnityEngine.Rect,UnityEngine.Rect,int,UnityEngine.Object,UnityEngine.Object,System.Type,System.Type,UnityEditor.SerializedProperty,UnityEditor.EditorGUI/ObjectFieldValidator,bool,UnityEngine.GUIStyle,UnityEngine.GUIStyle)
0x000001c41aed39cb (Mono JIT Code) UnityEditor.EditorGUI:smile:oObjectField (UnityEngine.Rect,UnityEngine.Rect,int,UnityEngine.Object,UnityEngine.Object,System.Type,UnityEditor.SerializedProperty,UnityEditor.EditorGUI/ObjectFieldValidator,bool,UnityEngine.GUIStyle)
0x000001c73a00787b (Mono JIT Code) UnityEditor.EditorGUI:smile:oObjectField (UnityEngine.Rect,UnityEngine.Rect,int,UnityEngine.Object,UnityEngine.Object,System.Type,UnityEditor.EditorGUI/ObjectFieldValidator,bool,UnityEngine.GUIStyle)
0x000001c73a007273 (Mono JIT Code) UnityEditor.MaterialEditor:TexturePropertyBody (UnityEngine.Rect,UnityEditor.MaterialProperty)
0x000001c73a0050e3 (Mono JIT Code) UnityEditor.MaterialEditor:TextureProperty (UnityEngine.Rect,UnityEditor.MaterialProperty,string,string,bool)
0x000001c73a004c8b (Mono JIT Code) UnityEditor.MaterialEditor:TextureProperty (UnityEngine.Rect,UnityEditor.MaterialProperty,string,bool)
0x000001c73a004bd3 (Mono JIT Code) UnityEditor.MaterialEditor:TextureProperty (UnityEngine.Rect,UnityEditor.MaterialProperty,string)
0x000001c73a00487b (Mono JIT Code) UnityEditor.MaterialEditor:smile:efaultShaderPropertyInternal (UnityEngine.Rect,UnityEditor.MaterialProperty,UnityEngine.GUIContent)
0x000001c73a0045d3 (Mono JIT Code) UnityEditor.MaterialEditor:ShaderPropertyInternal (UnityEngine.Rect,UnityEditor.MaterialProperty,UnityEngine.GUIContent)
0x000001c73a003ea3 (Mono JIT Code) UnityEditor.MaterialEditor:ShaderProperty (UnityEngine.Rect,UnityEditor.MaterialProperty,UnityEngine.GUIContent,int)
0x000001c73a00383b (Mono JIT Code) UnityEditor.MaterialEditor:ShaderProperty (UnityEditor.MaterialProperty,UnityEngine.GUIContent,int)
0x000001c73a00378b (Mono JIT Code) UnityEditor.MaterialEditor:ShaderProperty (UnityEditor.MaterialProperty,UnityEngine.GUIContent)
0x000001c73a003713 (Mono JIT Code) UnityEditor.MaterialEditor:ShaderProperty (UnityEditor.MaterialProperty,string)
0x000001c73a003663 (Mono JIT Code) [ShaderGraphPropertyDrawers.cs:284] UnityEditor.ShaderGraph.Drawing.ShaderGraphPropertyDrawers:smile:rawTexture2DProperty (UnityEditor.MaterialEditor,UnityEditor.MaterialProperty)
0x000001c73a00320b (Mono JIT Code) [ShaderGraphPropertyDrawers.cs:171] UnityEditor.ShaderGraph.Drawing.ShaderGraphPropertyDrawers:smile:rawMaterialProperty (UnityEditor.MaterialEditor,UnityEditor.MaterialProperty,UnityEditor.ShaderGraph.Internal.PropertyType,bool,UnityEditor.ShaderGraph.KeywordType)
0x000001c73a00285b (Mono JIT Code) [ShaderGraphPropertyDrawers.cs:98] UnityEditor.ShaderGraph.Drawing.ShaderGraphPropertyDrawers:smile:rawCategory (UnityEditor.MaterialEditor,System.Collections.Generic.IEnumerable`1<UnityEditor.MaterialProperty>,UnityEditor.ShaderGraph.MinimalCategoryData)
0x000001c73a0024bb (Mono JIT Code) [ShaderGraphPropertyDrawers.cs:72] UnityEditor.ShaderGraph.Drawing.ShaderGraphPropertyDrawers:smile:rawShaderGraphGUI (UnityEditor.MaterialEditor,System.Collections.Generic.IEnumerable`1<UnityEditor.MaterialProperty>,System.Collections.Generic.IEnumerable`1<UnityEditor.ShaderGraph.MinimalCategoryData>)
0x000001c73a001843 (Mono JIT Code) [ShaderGraphPropertyDrawers.cs:33] UnityEditor.ShaderGraph.Drawing.ShaderGraphPropertyDrawers:smile:rawShaderGraphGUI (UnityEditor.MaterialEditor,System.Collections.Generic.IEnumerable`1<UnityEditor.MaterialProperty>)
0x000001c73a0016b3 (Mono JIT Code) [BaseShaderGUI.cs:286] UnityEditor.BaseShaderGUI:smile:rawShaderGraphProperties (UnityEngine.Material,System.Collections.Generic.IEnumerable`1<UnityEditor.MaterialProperty>)
0x000001c73a001633 (Mono JIT Code) [ShaderGraphUnlitGUI.cs:37] UnityEditor.ShaderGraphUnlitGUI:smile:rawSurfaceInputs (UnityEngine.Material)
0x000001c739ff9c2c (Mono JIT Code) [MaterialHeaderScopeList.cs:68] UnityEditor.Rendering.MaterialHeaderScopeList:smile:rawHeaders (UnityEditor.MaterialEditor,UnityEngine.Material)
0x000001c739ff9a4b (Mono JIT Code) [BaseShaderGUI.cs:272] UnityEditor.BaseShaderGUI:ShaderPropertiesGUI (UnityEngine.Material)
0x000001c739ff6ddb (Mono JIT Code) [BaseShaderGUI.cs:247] UnityEditor.BaseShaderGUI:OnGUI (UnityEditor.MaterialEditor,UnityEditor.MaterialProperty[])
0x000001c739ff5aa0 (Mono JIT Code) UnityEditor.MaterialEditor:PropertiesGUI ()
0x000001c739ff50f3 (Mono JIT Code) UnityEditor.MaterialEditor:OnInspectorGUI ()
0x000001c41aec7b74 (Mono JIT Code) UnityEditor.UIElements.InspectorElement/<>c__DisplayClass62_0:<CreateIMGUIInspectorFromEditor>b__0 ()
0x000001c57db5829f (Mono JIT Code) UnityEngine.UIElements.IMGUIContainer:smile:oOnGUI (UnityEngine.Event,UnityEngine.Matrix4x4,UnityEngine.Rect,bool,UnityEngine.Rect,System.Action,bool)
0x000001c57dc1e0bb (Mono JIT Code) UnityEngine.UIElements.IMGUIContainer:HandleIMGUIEvent (UnityEngine.Event,UnityEngine.Matrix4x4,UnityEngine.Rect,System.Action,bool)
0x000001c57dc1be0b (Mono JIT Code) UnityEngine.UIElements.IMGUIContainer:smile:oIMGUIRepaint ()
0x000001c57dc1a21c (Mono JIT Code) UnityEngine.UIElements.UIR.RenderChainCommand:ExecuteNonDrawMesh (UnityEngine.UIElements.UIR.DrawParams,single,System.Exception&)
0x000001c57dc188c3 (Mono JIT Code) UnityEngine.UIElements.UIR.UIRenderDevice:EvaluateChain (UnityEngine.UIElements.UIR.RenderChainCommand,UnityEngine.Material,UnityEngine.Material,UnityEngine.Texture,UnityEngine.Texture,single,Unity.Collections.NativeSlice`1<UnityEngine.UIElements.UIR.Transform3x4>,Unity.Collections.NativeSlice`1<UnityEngine.Vector4>,UnityEngine.MaterialPropertyBlock,bool,System.Exception&)
0x000001c57dc15283 (Mono JIT Code) UnityEngine.UIElements.UIR.RenderChain:Render ()
0x000001c57db7b9c3 (Mono JIT Code) UnityEngine.UIElements.UIRRepaintUpdater:Update ()
0x000001c57db0d42e (Mono JIT Code) UnityEngine.UIElements.VisualTreeUpdater:UpdateVisualTreePhase (UnityEngine.UIElements.VisualTreeUpdatePhase)
0x000001c57db0d33b (Mono JIT Code) UnityEngine.UIElements.Panel:UpdateForRepaint ()
0x000001c57db0b71b (Mono JIT Code) UnityEngine.UIElements.Panel:Repaint (UnityEngine.Event)
0x000001c57db0a87c (Mono JIT Code) UnityEngine.UIElements.UIElementsUtility:smile:oDispatch (UnityEngine.UIElements.BaseVisualElementPanel)
0x000001c57db0a523 (Mono JIT Code) UnityEngine.UIElements.UIElementsUtility:UnityEngine.UIElements.IUIElementsUtility.ProcessEvent (int,intptr,bool&)
0x000001c57db0a2df (Mono JIT Code) UnityEngine.UIElements.UIEventRegistration:ProcessEvent (int,intptr)
0x000001c57db0a1fb (Mono JIT Code) UnityEngine.UIElements.UIEventRegistration/<>c:<.cctor>b__1_2 (int,intptr)
0x000001c57db0a04d (Mono JIT Code) UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
0x000001c57db0a106 (Mono JIT Code) (wrapper runtime-invoke) <Module>:runtime_invoke_void_int_intptr_intptr& (object,intptr,intptr,intptr)
0x00007ffa0fe30384 (mono-2.0-bdwgc) [mini-runtime.c:3445] mono_jit_runtime_invoke
0x00007ffa0fd6eb34 (mono-2.0-bdwgc) [object.c:3066] do_runtime_invoke
0x00007ffa0fd6eccc (mono-2.0-bdwgc) [object.c:3113] mono_runtime_invoke
0x00007ff672163f14 (Unity) scripting_method_invoke
0x00007ff672143864 (Unity) ScriptingInvocation::Invoke
0x00007ff67213e485 (Unity) ScriptingInvocation::Invoke<void>
0x00007ff6722896ba (Unity) Scripting::UnityEngine::GUIUtilityProxy::ProcessEvent
0x00007ff672c512b8 (Unity) GUIView::ProcessRetainedMode
0x00007ff673211ff3 (Unity) GUIView::OnInputEvent
0x00007ff672c510c5 (Unity) GUIView::ProcessInputEvent
0x00007ff67320ab9d (Unity) GUIView::smile:oPaint
0x00007ff673213fcc (Unity) GUIView::RepaintAll
0x00007ff672d82c8e (Unity) PlayerLoopController::UpdateScene
0x00007ff672d80bf2 (Unity) Application::TickTimer
0x00007ff6731e759a (Unity) MainMessageLoop
0x00007ff6731ec3b4 (Unity) WinMain
0x00007ff67456448e (Unity) __scrt_common_main_seh
0x00007ffad6f774b4 (KERNEL32) BaseThreadInitThunk
0x00007ffad71426a1 (ntdll) RtlUserThreadStart

That’s why we have LTS

+1 this - it’s super important, and becomes more and more so as the team and project sizes scale. Not to mention how useful it would be in UI as well.

The other changes are great too, but “locking a prefab to prevent overrides” is one of the biggest pain points I found.

2 Likes

Can we change a prefab parent?

Not being able to modify the hierarchy after making it really makes iterating impossible.

2 Likes

Great update!

It would be nice to have the option to allow prefab replacements to match the scale of the objects.

Hello.

Am I the only one who finds the position of the main buttons very strange and inconvenient?

I think the popularity of buttons has this order: Open > Select > Overrides. Also most of the time we have inspector window on the right side of the screen so for the most used operation (Open) I need to move the cursor very far and pixel hunting button.

Original

What I suggest

2 Likes

Hi @Stardog

Could you provide some detail for the option to allow prefab replacements to match the scale of the objects?
A scenario in which you’d use it and how the UI might best support it would be super helpful.

Thanks.

Hi Andrew. Thanks for the feedback. You have a point, but here’s why we went with the current layout:

  • In Unity, all the ‘Open’ buttons for assets are in the lower right of the inspector header. So keeping it consistent is a goal.
  • This button acts essentially as a CTA (call to action). The standard place for those are in the bottom right.
  • The parts of the screen that are easiest to reach follow Fitts’ law. The points on the screen that are easiest to hit are, counter intuitively, in the corners. Of course this open button is not exactly in the screen corner though.

Keep in mind that this open button here is not the only way to open a prefab for editing - you can also click the chevron on the Hierarchy, among other ways.

But here’s what I think we could & should do: I think what many users would like, is a way to do many operations, such as opening a Prefab and other things, directly in the Scene window. Without announcing anything just yet, I think you might see that happening, and when that is true, the amount of cursor movement needed to open a given Prefab will be smaller than ever.

Thanks for the feedback. I understand your logic but I think that the open button is an old design decision that needs to be replaced with a solution for this time. Perhaps when this button appeared, there were no thoughts about a new prefab system.
I click the Open button (the lower right of the inspector header) only few times for 6 years of work in Unity.
Will be interest to have some analytic for this button.

I hope in the future Unity team adds an option to change buttons positions for comfort using prefabs from Inspector people like me.

Have a nice day :slight_smile:

Regarding Variant inheritance refactoring: see my answer here: https://discussions.unity.com/t/720877/23

1 Like

Yes. I can’t see a problem with it. I actually use just the Override option, I like it close.