PC用スタンドアロン環境向けにUnityで大きな画像ファイルをたくさん扱う際のメモ。
PC向けにADV的なものを作る場合、1280x720や1920x1080、あるいはそれ以上に大きな画像ファイルを何百枚と扱うかと思いますが、Unityだと若干の工夫が必要です。スマホ向けはここでは考えません。
ここではCG枚数に応じた選択肢をいくつか提示してみたいと思います。
10枚程度の場合
素直にDXT5で埋め込みましょう、とても楽です。今ならCrunch textureがあるので結構な枚数でも無理なく詰め込めると思います。なめらかな肌のグラデなどは若干失われるかもしれませんが見てもわからないかもしれません。自分の目に自信がない場合はデザイナーに相談すべきです。
30枚程度の場合
Unityで2Dをやる場合の定番アセット2dtoolkitにはスプライトシートをpngで保存する機能があります。これとマルチアトラスを組み合わせると、簡単に扱えます。
ただ、こいつはべらぼうにメモリを食うので100枚を超えると無理です。
またスプライトシートの作成もすごく遅いので結局は次の方法が良いでしょう。
2dtkを使用していて部分的に大きな画像を使いたい、といった特殊な用途向けですね。
それ以上の場合、あるいは全て
pngファイルを直接読み込んでスプライトを作成しましょう。やり方は拡張子をbyteに変えてResourceフォルダに置き、Texture2D.LoadImageを使います。
このやり方だと作成した画像ファイルを特定のフォルダに名前を変えて放り込むだけなので簡単な上に、いちいちUnityが変換しないので作業が軽いというのも良いですね。
1280x720決め打ちのコードだとこんな感じです。このままだと画面をシェイクさせた時に困るなーみたいなこともぼんやりと考えておくべきですが、2のべき乗の事は忘れましょう。
TextAsset img = Resources.Load<TextAsset> (filename);
Texture2D tex = new Texture2D (1280, 720, TextureFormat.RGBA32, false);
tex.LoadImage (img.bytes);
tex.Apply(true,true);
GetComponent<SpriteRenderer>.sprite = Sprite.Create(tex, new Rect(0, 0, 1280, 720), new Vector2(0.5f, 0.5f), 4);
Sprite.Createの第4引数はPixelPerUnitです。私はドットゲームを作ることが多いので、1280x720のスクリーンに320x180で表示するのですが、PPUを4にするだけでカメラをわけなくても表示できます。楽ですね。
Resources.UnloadUnusedAssets()なども適宜呼んでやりましょう。