private IEnumerator LoadStaticAssets()
    {
        if (!LoadedStatic)
        {
            LoadedStatic = false;

            List <KeyValuePair <string, Run> > actions = new List <KeyValuePair <string, Run> >();
            actions.Add(new KeyValuePair <string, Run>("Loading Projectiles...", () => { ProjectileData.LoadProjectiles(); }));
            actions.Add(new KeyValuePair <string, Run>("Loading Effects...", () => { TempEffect.LoadAll(); }));
            actions.Add(new KeyValuePair <string, Run>("Loading Attachments...", () => { Attachment.Load(); }));
            actions.Add(new KeyValuePair <string, Run>("Registering Projectiles...", () => { Projectile.NetRegister(); }));
            actions.Add(new KeyValuePair <string, Run>("Registering Attachments...", () => { Attachment.NetRegister(); }));

            int total = actions.Count;

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            // Loop and execute...
            for (int i = 0; i < total; i++)
            {
                var pair = actions[i];
                // Execute...
                UI.Title      = pair.Key;
                UI.Percentage = i / total;
                yield return(null);

                watch.Restart();
                try
                {
                    pair.Value.Invoke();
                }
                catch (Exception e)
                {
                    Debug.LogError("Exception when loading on step #{0} - '{1}':\n{2}".Form(i, pair.Key, e));
                }
                watch.Stop();
                Debug.Log("'{0}' - Took {1} milliseconds.".Form(pair.Key, watch.ElapsedMilliseconds));
            }

            LoadedStatic = true;
            StartCoroutine(LoadScene());
        }
    }