Unite2014
多様なAndroidデバイス向けに管理・最適化を行うには
アンドロイドの課題
• デバイスの種類が膨大
• すべてのデバイスに対応するのが困難
• 現在進行形でどんどん新たなデバイスも増えている
どうするか?
ハイエンドを避ける
• ハイエンドは開発効率が良くない
• デバイス毎の差異の影響を受けやすい
• CPUの性能やメモリの容量など
• ユーザーがハイエンドより楽しめるものをより重視している
ハードウェアの要求を調べる
• いくらかのハードウェア性能で起動可能端末を選択は出来る
• OpenGLES2.0は8%程度
• Androidバージョンで多少の足切
• ICS以降が約80%のシェアなので、このバージョンを目安にするといい
• 制限できない項目も
• CPUの性能
• GPUの性能
• メモリの容量
• ストレージの容量
画面解像度
• それぞれのデバイス毎に個別対応は無理
• 比率とかで計算した方がいいかも
• UI作るならUnityエディター上でカメラを確認しながら配置した方がい
い
• 新しいGUIは4.6から
3Dについて
• とくに悩む必要は恐らくない
• ワールドは変わらずウインドウが違うだけ
2Dについて
• 3Dほど簡単にはいかない
• アスペクト比によって、縦横いずれかの端を犠牲にする必要が出てく
る
• Cameraをスクリプトで調整する必要が必ず出てくる
• 画面の大きさで位置や大きさを調整
• 比率で設定する
• ピクセルではなくメートルとかの単位で管理する
パフォーマンス
• 色んな資料があるからそれを見た方が早い
• Googleとか
• StackOverFlowとか
• Profilerを使う(Pro専用)
• お手軽にCPUやメモリの使用具合を確認できる
テクスチャについて
• 可能な限り圧縮テクスチャを使用する
• こっそり変えても多分気づかれないくらいには綺麗に出る
※作注) 実際3Dテクスチャならまずわからない
• メモリと速度が向上する
※作注) AndroidはETCという形式が使われる。
これは1テクセルあたり0.5バイトで表現出来る上にVRAMに送る際に
圧縮されたまま転送できるので、転送速度が段違いに
(16bitsテクスチャに比べて1/4の容量しか転送しなくていい)
ただ、アプリサイズはzip圧縮されるのでそこまで変わらない
レンダリングパスについて
• UnityではDeferred、Forward、VertexLitの3つのパスが用意されてい
る
• Deferred : 精細な照光計算なんかにつかう
• Forward : 基本的な描画につかう
• VertexLit : 簡易照光計算につかう
• VertexLitが一番速いのでおすすめ
• 影とかは出せなくなる
オーディオについて
• 圧縮は避ける
• 圧縮してもメモリ使用量はそこまで変わらなかった
• ただCPUの使用量が大幅に増加
• メモリに保持する設定の方がおすすめ
• 2D/3Dサウンドの設定
• 3Dサウンドを使用する理由がないなら2Dの方がCPU節約になる
• 特に2Dゲームならほぼいらないのでは?
AndroidNDK
• JNIなしで使用することが判明
• DLLImportを使う
• 詳細はBuilding Plugins for Androidでぐぐる

【Unite2014】多様なAndroidデバイス向けに管理・最適化を行うには