Sprite.Createのパフォーマンスについて

概要

重たい!
どれくらい重たいのか、計測した。

docs.unity3d.com

なかなか時間がかかった。

環境

Unity 2018.2.0f2
MacOS
Intel Corei5 2GHz
8GB メモリ
1つのTextureで最大100KB

時間の計測

1回実行するごとに、0.09秒

System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();

    foreach(var name in nameList){
        var imageData = illustDataIO.LoadIllustTexture2D(name);

        sw.Start();
        var createSprite = Sprite.Create(imageData, new Rect(0,0,imageData.width,imageData.height), new Vector2(0.5f, 0.5f));
        sw.Stop();
                                
        createSprite.name = name;
        spriteList.Add(createSprite);
    }
Debug.Log("画像生成" + nameList.Count);
Debug.Log("time" + sw.ElapsedMilliseconds / nameList.Count);

100枚作ったら、9秒かかる計算

対処した方法

  • ゲーム起動時に必要となる画像を全て生成しておく
  • シングルトンオブジェクトにて、生成した画像をキャッシュ
  • ゲーム進行中に画像が追加されたら、シングルトンにも追加