ゲームのチューニングを行おう
ゲームのチューニングを行おう
VSync Countで選択
table:垂直同期の設定
Don't Sync 垂直同期しない 0
Every V Blank 垂直同期する 1
Every Second V Blank ディスプレイリフレッシュレートの半分で同期する 2
スクリプトで制御する場合
code:cs
QualitySettings.vSyncCount = 0; // 垂直同期の設定
Application.targetFrameRate = 45; // フレームレート設定。VSync CountをDon't Syncにしないと無視される
フレームレートを上げると、描画回数とUpdate()呼び出し頻度が上がる
Scriptのチューニング
性能劣化の可能性があるのは以下の要素
Update()の中でInstantiage()
Update()の中でコンポーネントを使うとき、毎回GetComponent()している
対策
オブジェクトプールの実装
Start()で予めGetComponent()しておく
Renderingのチューニング
SetPassCallsを減らすと良い
光と影を調整する
建物などの動かないオブジェクトは、Staticにチェックを入れる
影の調整
ProjectSettings -> Qualityで調整する
Shadow Resolution : 影の解像度
Shadow Distance : 影の描画距離
ProjectウィンドウのCreate -> Sprite Atlasで作成できる
Object for Packingに含める画像を指定する(ディレクトリ単位でもできる
※ProjectSettings -> Editor で Sprite Packerを有効化しておかないと機能しない
描画処理をさらに詳しくチェックする
Profiler -> Rendering -> Open Frame Debuggerを使う
Unity Remote
エディタから任意のスマホで動作確認できるアプリ
仕組み的には、エディタ(PC)で作成したゲーム画面をスマホに転送しているらしいので、実機確認には使えない
タッチ操作のチェックやレイアウトのバランス確認向け
ゲーム容量の節約
iOSでは150MB以上のアプリをダウンロードするにはWiFi接続が必要になる
Androidでは100MBを超えるアプリをストアで公開するにはファイルを分割する必要がある
Build Report
どのような種類のリソースが、どの程度容量を占めているのかを調べられる
Consoleウィンドウ -> 右上のボタン -> Open Editor Log から Editor.logを開ける
このEditor.logの中にBuild Reportが含まれている
画像系のサイズ削減
(ビルド後における)画像のサイズは、プレビューの下の方に書いてる
table:画像サイズの削減項目
Generate Mip Maps テクスチャが画面上で小さく表示される時に使われる縮小版テクスチャの生成要否。
Max Size 画像の縦横サイズ最大値。これを超えると縮小される
Compression 画像の圧縮設定
Use Crunch Compression Crunch圧縮の設定。Qualityの値が小さいほど圧縮率が上がる
Generate Mip Map
画像が無圧縮の状態だとサイズが多少増えるだけだが、圧縮設定をしてしまうと極端にサイズが増えるので注意
Atlas化した場合
2重に圧縮されて劣化するので、画像側はMaxTextureSizeだけ設定して、圧縮はAtlas側で行うのが良い
音声系のサイズ削減
(ビルド後における)音声のサイズは、!吹き出しの所に書いている「Imported Size」
Qualityの値で調整する
本の筆者は、小さいものは100%、BGMなどの大きいものは36%にしているのだそう
Resourcesの中身を減らす
Unityはビルド時に、Assetの取捨選択をしているが、Resourcesフォルダに含まれる資産は強制的にビルド対象となる
ResourcesにPrefabを居れた場合、そのPrefabが参照している資産も強制的にビルド対象になる(それはそう)
要は雑に使うな、と
不要なシーンをビルド対象に含めない
シーンで使われているAssetが全部ビルド対象になるため
AssetBundle
任意のAssetをAssetBundleと言う形で切り出す事が出来る
AssetBundleをサーバーに配置して、ゲーム中にダウンロードする事で本体の容量を節約できる
コンテンツの追加配信でも活躍
ただし、スクリプトはAssetBundleに含められない
ゲームのビルド設定
Development Build
開発版ビルド設定
デバッグ機能が有効になる
if(Debug.isDebugBuild){}で、Development Buildでしか機能しない処理が書ける
Autoconnect Profiler
AndroidやiOSでゲームを起動したとき、Unityエディタのプロファイラに接続を試みるようになる
Script Debugging
VisualStudioなどでブレークポイントを仕込めるようになる
ビルドプラットフォームの変更キャッシュ
プラットフォーム切り替えをした時、全リソースを対象プラットフォーム用に圧縮し直すのでやたら時間かかる。
圧縮資産をキャッシュする事で、切り替え時間を短縮できる
Preferences -> Cache Server -> Cache Server Mode を Local に変更
当然、ディスク容量を持って行かれる。。。。
持って行かれる量は Maximum Cache Size(GB) で上限設定が可能
Android向けビルド
端末を接続した状態で「Build And Run」をすると、直接インストールできる
Player Settingsで、Package Nameを設定する必要がある
ユニークIDとして使われる。リリース後は変更不可
aabファイルの生成
apkファイルにする前の状態のデータ
GooglePlayの仕様変更で、apkではなくaabを送信することで、Google側が最適化したapkを作成するのだそう
aabはx86アーキテクチャを含めるとビルド出来ないので、ProjectSettings -> Target Architectures からx86を外すこと
iOS向けビルド
Xcode(とMac)が必要
Development Buildの場合は、Run in Xcode as も Debug に設定して置く必要がある
シミュレータでゲームを動かす場合は、PlayerSettingsから、TargetSDKをSimulator SDKにする必要がある
Bundle Identifierの設定が必要
WebGLビルド
公開プラットフォームの提案
Google Play
App Store
Steam
UDP(Unity Distribution Potal)