I am also interested in this topic.. hope someone can provide a good example that utilises NGUI. In the mean time here's how to do it in Unity3D
The simple way:
Create a scene that will be your loading screen, do what you want to do with this scene (an animation or whatever you want). Don't forget to make this small to load.
Create an object with a script and in the Update function of this script just put these lines:
if(Application.GetStreamProgressForLevel("levelName") ==1){
Application.LoadLevel("levelName");
}
Make sure that you put these scenes in order when publishing:
LoadScreen
Leve1
LoadScreen
Level2
...
The Application.GetStreamProgressForLevel() function return a float number between 0 and 1, you can use this to make a progress bar too.
---------
If you have Unity Pro you should use " Application.LoadLevelAsync "
Loads the level asynchronously in the background.
Unity will completely load all assets and all objects in the scene in a background loading thread. This allows you to load new levels while still playing the current one, show a progress bar or create a completely streaming world where you constantly load and unload different parts of the world based on the player position, without any hiccups in game play.
http://docs.unity3d.com/ScriptReference/Application.LoadLevelAsync.html