Best Practice: 3D GUI or Built-in uGUI?

I see two main ways of implementing GUIs in Unity:

  1. Using the built-in GUI() and GUILayout() functions
  2. Using a separate Camera and with Quads to make the various controls.

What is the best practice regarding this? Is it completely dependent on application?

Which method is less performance-heavy, especially considering mobile devices?

You could also download the latest Unity 4.6 stable beta and use the new UI system. Unity Editor Beta Releases

Overview: Unity 4.6 - New UI System overview - YouTube

You can also use the unity animation system to make nice transitions and fade-in or fade-out effects.

For instance, I see some advantages and disadvantages of the 3D method:

Advantages:

  • Can use AnimatorControllers to give excellent effects like fade-ins and fade-outs
  • Can do more advanced things, such as radial controls, easier than with the built-in GUI system
  • Can incorporate 3D models into the GUI if you wish
  • Can give perspective, shadows, etc. very easily

Disadvantages:

  • Scripting becomes slightly messy, as either each control needs to have its own script to control its behaviour, or a very monolithic controller class with handles to each of its controls has to be written.
  • Dynamic lists, which could easily be handled by ScrollViews become a little more tricky