Technically, it isn’t overly difficult, it is more about design and expected behaviour and implementation. Once you start nesting you create nested dependencies that can conditionally change. Take UI. Say you have a “blue_panel” ,“shop_window”, “small_button” and a “standard_title” as nested prefabs.
So you create a layout that has a that has a shop (for example). You start with the shop_window, in it you place blue_panel, in that you place a standard_title, and a blue_panel with a table layout. In that table you use the blue_panel 50 times. In that panel you use the standard_title and two more blue_panel, one of which has 2-3 instances of the small_button with local changes (text probably). Now you have several categories, so you dupe store panel several times and put in tab section, which is the blue_panel with some tabs sitting on top, made of small_buttons.
Ok, so now several questions arise. Say on the third panel, the fourth pane, you want to make one of buttons green.
So you change the background to green. So what are you changing?
Our layout looks something like this:
shop_window (swords)
blue_panel (main)
standard_title
small_button (tab 1)
small_button (tab 2)
<...>
small_button (tab 10)
blue_panel (for tabbed content - fire swords)
blue_panel (content holder)
blue_panel (base item 1)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
blue_panel (base item 2)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
<...>
blue_panel (base item 20)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
blue_panel (for tabbed content - frost swords)
blue_panel (content holder)
blue_panel (base item 1)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
blue_panel (base item 2)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
<...>
blue_panel (base item 20)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
<...>
blue_panel (for tabbed content - holy swords)
blue_panel (content holder)
blue_panel (base item 1)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
blue_panel (base item 2)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell) <---- lets change this one
small_button (info)
<...>
blue_panel (base item 20)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
<...>
shop_window (swords)
blue_panel (main)
standard_title
small_button (tab 1)
small_button (tab 2)
<...>
small_button (tab 10)
blue_panel (for tabbed content - fire swords)
blue_panel (content holder)
blue_panel (base item 1)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
blue_panel (base item 2)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
<...>
blue_panel (base item 20)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
blue_panel (for tabbed content - frost swords)
blue_panel (content holder)
blue_panel (base item 1)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
blue_panel (base item 2)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
<...>
blue_panel (base item 20)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
<...>
blue_panel (for tabbed content - holy swords)
blue_panel (content holder)
blue_panel (base item 1)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
blue_panel (base item 2)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
<...>
blue_panel (base item 20)
standard_title
blue_panel (item image)
blue_panel (item stats)
blue_panel (buttons)
small_button (buy)
small_button (sell)
small_button (info)
<...>
So we want to make that one button be a trade instead of a sell (or whatever). So we go in and change that text. What did we change locally? was it that button? Or was it the panel containing the buttons. or the panel containing the item? The panel above that (content)? Or the item panel? Or the panel containing the items? Or the panel that is the tabbed content? Or top level panel? Or the shop_window? What if I go midway in at the tabbed content panel and hit revert? Is that affected or not? More importantly, what is the expectation? What is a local change when have a nested stack? If I hit revert does it wipe all its content, because the prefab itself has no content. Who actually “owns” that local change?
In fact, I would bet that if anyone here answered that question… “what would you expect to happen if you revert something in the middle?”… you would probably get several different answers.
The concepts are hard to manage as well as expectations. Any solution presents a unexpected result for some group of folks. Which boils down to giving users the ability to do massive (hidden) destruction to their work with button click. Most new users don’t use vcs, most seem to jump in and do the most insane things. From a UI/UX standpoint, making this functionally useful, it comes with a heavy educational overhead. Despite that fact that most people believe that it would be simple solution and usage. It is safe bet that any design that unity implements (if ever) will endlessly confuse and anger many users. Mostly because no one ever reads the docs, and tend to “expect” things to work the way they have in their head regardless of the docs. Either that or they would have to severely limit the scope and maybe the depth, which again would freak people out.
For me, that wasn’t a problem. I knew exactly how my users were going to use it, and told them up front what the pain points were, and could tailor it to fit their needs, and quite simply, they were extremely advanced users to start with. Plus, I was within yelling (throwing) distance if things went wrong. Unity would be unleashing it on millions of users many with virtually no skills, and never read the docs.
On top of all that, it would really encourage bad design with deeply nested dependencies. Nesting obviously isn’t a blocker. It is clear that people often request things be “easier”, but often that comes at a cost, And many times the solution is to look at the bigger picture (design) and just plan a logical workflow that balances flexibility with dependencies and spf. Sure it is nice to be able to change everything at the drop of a hat (yes, sometimes it is necessary), but planning and prototyping are the quickest ways to avoid over complicating and unnecessary pivoting. The more you plan, the less escape hatches you have to build.