Unityでテクスチャを読む方法は実は複数ある。
代表的なのが、モデルにテクスチャを参照しているマテリアルを登録する方法。これで、読むことを意識せず勝手にTexture2Dを読んでくれる。
ただ、状況によって(特にGUIゲーム)ランタイムで読み込みたい場合も多いと思う。
その方法を並べてみる。
これは、大きく分けると「1」「2,3」と「4,5,6」と「7」に分けられる。つまり、Unityの機能で圧縮済みフォーマットを使うか、png等の画像フォーマットをtexture2d経由で取得するか、だ。1. モデルのマテリアルにTextureを貼っつけてシーンに配置
2. Resourcesにファイルを配置し、Resources.Load
3. AssetBundleにテクスチャを格納し、bundle.Load
4. WWWからテクスチャをダウンロードし、www.textureNonReadable
5. WWWからテクスチャをダウンロードし、www.LoadImageIntoTexture
6. IO.Fileでテクスチャのbytesを取得し、texture2d.LoadImage
7. ネイティブプラグインでTextureを作ってTexture2D.CreateExternalTextureとtexture2d.UpdateExternalTextureで取得
7はかなり特殊で、しかも気づいたらドキュメントから消されていたので将来的に消えるかもしれない。
ちなみに読込みパフォーマンスは3>2>5≒6>4て感じ。これはUnloadunusedAssetsとかメモリ管理処理云々とかをガン無視してとりあえず速度を比較しただけなので、状況により若干上下するかもしれない。またAndroiはResources.Loadはとても高いペナルティがあるので、Androidで動かすともっと遅い。それに、そもそもAssetBundleはマウント後は早いがそこまでに時間がry…
(AnrdoidのResourcesはAPK内に格納されるため、実際の挙動としてはunzip->取得の流れが入り大きいファイルの解凍はとても遅い)
各々の特徴と使い方とかは次回にでも。