こんにち(ばん)はー。
菅原だ。
今回はUnityでスマホアプリを作るときのTipsを紹介しよう。
アプリを作りながら気になったところを何回か分けて挙げていく。
今回はアプリの高速化の話だ。
しかも、コーディングテクニックではなく、設定の変更だけで行える高速化についてだ。
1.FPS
Unityは可変フレームレートで動作するように作られている。
それは良いのだが、デフォルトのターゲットフレームレートが30になっている。
これを60に変えてあげることで滑らかになるのだ。
※ターゲットフレームレートはアプリの内容に合わせて適切な値を設定する必要がある。
1/60秒では処理が間に合わないアプリや、画面更新頻度が少ないアプリは60FPSのメリットはあまりない。
電池の消耗も早くなる。
2.VSync
VSyncとはディスプレイの更新のタイミングに同期させて処理を行う仕組みで、垂直同期とも言われる。
VSyncをOFF(Don’t Sync)にすると最高のパフォーマンスを得られるが、
ティアリングという描画のズレが起きる可能性がある。
ディスプレイの更新と描画の更新が被って、描画途中のものが表示されてしまう現象だ。
※この設定もアプリの内容や状態に合わせて適時変更するのがベスト。
画面全体が頻繁に更新されるようなシーンではティアリングが目立つので、VSyncはONにしておいた方が良い。
上記1,2の設定方法は以下のコードで可能だ。
QualitySettings.vSyncCount = 0; // VSyncをOFFにする
Application.targetFrameRate = 60; // ターゲットフレームレートを60に設定
Start()やAwake()に記述すると良いだろう。
と言っても、どのクラスのStart()やAwake()なんだ?と疑問になる方もおると思う。
私もそうだった。
Unityにはmain関数的なものが無いので、
空のGameObjectを作り、GameController的なスクリプトを紐付け、そこに記述すると良い。
3.画質
Unityはマルチプラットフォーム対応のゲームエンジンだ。
一つのコードで複数プラットフォームで動作させることができる素晴らしいソフト。
Unityが女子だったら間違いなく惚れていただろう。いや、女子じゃなくても惚れている。
しかしだ。
複数プラットフォーム言ったら、それぞれのスペックが全然違うじゃんか!
最低スペックのマシンに合わせて作れ言うんか!?
と言う方もいるだろう。(いないか?)
大丈夫だ。Unityちゃんはそこもよく考えられている才色兼備な女子なのだ。
Edit -> Project Settings -> Quality
![Quality_b](https://stat.ameba.jp/user_images/20140611/00/sugawara-monolizm/c5/68/p/o0338066712969363527.png?caw=800)
インスペクタビューにQualitySettingsの項目が表示される。
上段の項目で、プラットフォーム毎にどのクオリティレベルを採用するかの設定を行える。
下段の項目では、それぞれのクオリティレベルに対する細かい調整が行える。
今回のアプリでは快適な動作を優先して「Fast」を選択することにした。
細かい調整の詳細については公式ドキュメントを参照してくれ。
ちなみにここの中でもVSyncの設定を行えるぞ。
Unity公式ドキュメントのクオリティに関するページ
http://docs-jp.unity3d.com/Documentation/Components/class-QualitySettings.html
4.レンダリングパス
ライトや影の影響をどれだけ厳密に行うのか。
光や影の演出は、ビジュアル的にゲームを素晴らしく見せる方法の一つだ。
ただ、ゲームの内容によっては、そんなものは必要なかったりする。
その分、高速に動作させたいというあなた。
設定方法は以下の通りだ。
Edit -> Project Settings -> Player
![PlayerSettings_b](https://stat.ameba.jp/user_images/20140611/00/sugawara-monolizm/22/e8/p/o0318066512969363528.png?caw=800)
「Rendering Path*」という項目を変更する。
VertexLit -> 高速
Forward -> 中間
Deffered Lighting -> 高画質
詳しく知りたい方は下記を参照。
Unity公式ドキュメントのレンダリングパスに関するページ
http://docs-jp.unity3d.com/Documentation/Manual/RenderingPaths.html
5.スクリプトコール
C/C++で実装されているUnity関数をスクリプトからコールする際の設定を変更するだけでも高速化ができる。
Edit -> Project Settings -> Player
![PlayerSettings_d](https://stat.ameba.jp/user_images/20140611/00/sugawara-monolizm/f5/d2/p/o0321066612969376147.png?caw=800)
「Script Call Optimization」という項目を変更する。
Fast but no Exception -> 高速
Slow and Safe -> 安全
6.加速度センサー
Unityのデフォルトの設定では、加速度センサーのサンプリングが60/秒で行われている。
加速度センサーを使わないアプリなら、これをオフってやることで余計な処理が無くなり、
より高速に動作するようになる。
センサーをオフにする方法は下記の通りだ。
Edit -> Project Settings -> Player
![PlayerSettings_e](https://stat.ameba.jp/user_images/20140611/00/sugawara-monolizm/4b/6b/p/o0321066612969376148.png?caw=800)
「Accelerometer Frequency」という項目を変更する。
Disable -> OFF
○Hz -> 数字が多いほど頻繁にサンプリング
7.その他、基本的な最適化
Unityのドキュメントを一読するのをお勧めする。
Unityの公式ドキュメントのグラフィックス パフォーマンスの最適化に関するページ
http://docs-jp.unity3d.com/Documentation/Manual/OptimizingGraphicsPerformance.html
iOSの最適化に関するページ
http://docs-jp.unity3d.com/Documentation/Manual/iphone-iOS-Optimization.html
速度に悩んでいる方、特に気にしていなかった方は、ぜひ試してみてくれい。
Unity面白いわー。
モノリズム
http://monolizm.com
https://www.facebook.com/monolizm
https://twitter.com/monolizm
相棒のブログ
http://ameblo.jp/nd-crown