I hope I won't step on any toes with this, but I'd just to help NGUI improve.
After using the new system for a couple of days, I have to agree with Farazel. While the new system is good in the sense it solves a problem that confused users before, the added effort that is necessary to keep draw calls down is turning out to be a big time consumer. It's harder for me to maintain a clear overview what's going on in the project, and building new UI elements is taking longer because I need to consider all other possible UI elements that are on screen at the same time.
It's also a big problem for dynamic interface elements. Before, I saved out root objects as prefabs (for example, Trading Cards), and we could instantiate these onto any other UI element. Now, we need to take that extra step of using BringForward a specific amount of times to make sure such a system doesn't balloon the draw calls to unacceptable levels. And this amount is dependent on the bit of UI the dynamic UI element will share the screen with. It just becomes confusing to keep track of it.
Making mistakes also impacts us more than before, because performance problems make it harder to test gameplay and code than visual errors.
Ferazels suggested some improvements, and I'd like to echo one in particular:
- Make each UIPanel manage the draw call for the widgets under it like the prior system. It will not check/compare depths of widgets on other panels.
The first would solve all the issues that I currently have with the new system and make NGUI better than ever, I would think.