Skip to main content

Optimising Unity new UI System

  • UI/Sprite textures aren't packed into a texture atlas by default. A tag is needed to group them. Read the documentation / tutorial on the sprite packer.
  • Overlapping text/graphic boundaries with another text/graphic will create additional draw calls, even if the actual visual graphics do not overlap.
  • Grids (other layouts too I presume) need minimum 1 pixel spacing between items, else items are considered overlapping and will create additional draw calls.
  • Images with alpha 0 are still rendered. They are rendered with alpha 0 even though they are not seen.
  • Unity currently does not support non-rectangle shapes as Sprites, so using the TightSpitePacker policy will cause image artifacts.
  • When UI objects are offscreen, they are still batched (rendered as well?). Possible solutions:
    • Change parent to non-UI parent, as UI Camera will no longer detect it
    • Change layer of panel so UI Camera will no longer detect it
    • Disable gameobject when off-screen
  • ScrollRect performance tuning
    • ScrollRect will rebuild / reload everything every frame if pixel perfect is enabled
    • Disabling the layout behaviors when it's not being used / updated (canvas size fitter, layout groups, layout elements)
    • For larger lists, disable off-screen objects
  • Canvas PixelPerfect has large performance impact. Disable it if possible.
  • Looping animations should be stopped when off-screen.
  • Fonts are not part of the texture atlas, unlike ngui/df-gui/etc. This will produce additional draw calls. Here's a post on adding your own bitmap font to use, which I believe you can add to the texture atlas? Unity 4.6 Bitmap font? Haven't tested this, but looks promising.

Comments

Popular posts from this blog

Using XAML on Monogame for WinRT (Part 2)

Integrating Monogame with XAML Metro UI If you're coming from the previous section, you now have a metro UI application project with blank page and also have monogame.windows8 library reference to the project. Now Let's fix some source code for the  pages to get XAML working with monogame. Step01 ( Hacking App.xaml.cs file) App.xaml.cs delivers the most important start point while rendering a particular page in Metro UI application. I added gamePage and mainPage as  a public variables as they become accessible from other classes to for page nagivations. Here is the source code for to see what it looks like for the final App.xaml.cs file. sealed partial class App : Application     {         public ContentManager Content { get; set; }         public GameServiceContainer Services { get; set; }         public GamePage gamePage;         public MainPage mainPage;   ...

Using XAML on Monogame for WinRT (Part 1)

Introduction Since I am planning to develop games for WinRT, I found out that the MonoGame is the most suitable framework for people like me who has experience with developing games with XNA framework. Although Windows Phone 7 offers to integrate Silverlight components with XNA, WinRT architecture is completely different from the previous framework. XNA games are not allowed to upload and showcase to new appstore because of the new terms and condition requirements and there's no way to integrate new Metro UI with XNA either. MonoGame solves this problem by creating XNA framework like wrapper over SharpDX which is the best and fastest DirectX wrapper available on current opensource projects.  However MonoGame offers XNA looks alike framework, the best solution would be combining Metro UI with MonoGame framework. Here is the tutorial of how to integrate MetroUI with MonoGame framework. Thanks to  Petrroll  on MonoGame forum for the sample code of MonoGame with XAM...