Sprite.Createのパフォーマンスについて
概要
重たい!
どれくらい重たいのか、計測した。
- ゲーム内でスクリーンショットを撮る
- スクリーンショットをゲーム内で見れる様にしたい
- Texture2DからSpriteを生成するのにSprite.Createを使用
- 画像はスクロールビューで100枚近く生成したい
なかなか時間がかかった。
環境
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秒かかる計算
対処した方法
- ゲーム起動時に必要となる画像を全て生成しておく
- シングルトンオブジェクトにて、生成した画像をキャッシュ
- ゲーム進行中に画像が追加されたら、シングルトンにも追加