PETAMPER【PART73】~アプリの軽量化~

LINEで送る
Pocket

前回、プロジェクトデータの不必要なデータを削除しましたが、正直これはアプリ自体が軽くなるわけではありません。

今回はアプリ自体の処理を軽くするための「軽量化」をしていきます。これまで開発途中の実機確認は『ASUS ZenPad 3S 10』というタブレットを使っていました。PCとほぼ変わらずサクサク動いていたので「さほど軽量化しなくても大丈夫だろう」と甘く見ていました。

ただデバッグをする際に2014年発売のスマホ『Arrows NX F-02G』(Androidバージョン5.0.2)でも確認してみたわけです。そしたら、まぁ重い重い!

特にギミックが多く登場してステージも長くなる後半のステージほど処理落ちしまくって、とてもまともに遊べるような状態じゃありません。違う機種を持っている周りの人にも何人かデータを渡して試遊してもらいましたが、私のスマホほどじゃないにしろ処理落ちは発生していました。

こりゃいかん!ということで急遽軽量化を図るべくあの手この手を施すに至ったわけです。

といっても、開発途中から影を消したり、Qualityのセッティングをいじったり、結構処理を軽くすることは意識してやっていたつもりなので、今回細かい部分は端折って、特に大きく影響しそうな部分だけピックアップします。

 

目次

Skyboxとカメラ

Skyboxのマテリアルはそれだけでかなりの容量を喰います。(6面分のテクスチャが必要ですし、見えない面のテクスチャを削ったとしてもデカい)今まで余裕ぶっこいて使っていましたが、ばっさり使わないことにしました。

メニュー「Window」→「Lighting」→「Settings」を開く。

027

Skybox MaterialをNoneに。

028

UnityはデフォルトでSkyboxが設定されているので、スマホゲームの場合は最初から切っておいた方が良さそうです。変わりに背景を表示させる用に3DオブジェクトのPlaneにテクスチャを張ったものメインカメラの子にしました。(演劇の書き割りみたいな感じです)

030

 

ついでにカメラの設定についても。

029

・まずカメラで重要なのは「Rendering Path」

これを「Forward」もしくは「Legercy Vertex Lit」に。デフォルトのDeferredはライトの光と影が一番キレイに出るけど重い。

一番軽いのがLegercy Vertex Litだけども、画面の見栄えをどこまで犠牲にするかはゲーム次第。

・あとは「Clipping Planes」のFarの値は出来るだけ小さく。この値は描画する距離なので、あまり遠くまで設定するのはよろしくないかと。

【2017/08/07補足】
指摘をいただいたので補足説明を。「Forward」の設定だとライトの数が多ければ多いほどそれに比例して負荷が上がります。ですのでリアルタイムな(動的な)ライトを多用するようなシーンであれば「Forward」よりも「Deferred」の方が良いという場合があるということです。個人的にはスマホのゲームを作る場合であれば、そもそもライトを複数使わず、Forwardにしておいた方が良いだろうな~とは思います。
レンダリングパスに関するマニュアルのリンクも貼っておきます。
https://docs.unity3d.com/ja/540/Manual/RenderTech-DeferredShading.html
https://docs.unity3d.com/ja/540/Manual/RenderTech-ForwardRendering.html

 

テクスチャのサイズと設定

テクスチャも数が多いと容量がバカになりません。テクスチャの設定で気を付けるのは以下の点です。

031

・MAX Sizeを小さく。デフォルトだと2048に設定されていると思うので、極力小さい値に。(最小は32)ただ画像が粗くなる可能性もあるのでどこまで見栄えを担保するかはよく考えて。

・Generate Mip Mapsのチェックを外す。これはミップマップを生成します。画面上に小さくテクスチャを表示させる場合に使用しますが、なくても問題ないなら切りましょう。

 

動かないオブジェクトはStaticに

全てのオブジェクトにはインスペクタービューのオブジェクト名の横に「Static」というチェックボックスがあります。

032

これにチェックを入れると、「そのオブジェクトはゲーム中に動かない」と判断されるので、事前に最適化することができます。ですので、ゲーム中一切動かないものは片っ端から「Static」「Static」「Static」!

※ちなみに物理演算などで本来動くものもStaticにチェックを入れてしまうと動かなくなるので注意。

 

Quality Settings

あとはこれ。メニュー「Edit」→「Project Settings」→「Quality」からクオリティそのものの設定を変更します。

033

まず、一番上のチェックボックスで、プラットフォームごとにデフォルトのクオリティ設定が変えられます。iOSやAndroidなら低設定のものを、PCなら高設定にしておくと良いです。

下の項目はどれも結構大事ですけど、特に影響が大きいと思うのがまず「Texture Quality」。テクスチャの解像度をFull、1/2、1/4、1/8に設定できます。解像度が低いほど処理は速くなりますが、下手すると画像がガビガビになる可能性もあるので、バランスを見て判断を。

あとは、「V Sync Count」。レンダリングの処理とディスプレイの画面書き換えとの同期の設定です。一番軽いのは「Don’tSync」で同期をとりません。そのせいで画像に乱れが生まれる可能性がありますが、今のところスマホで確認する限りティアリングはほとんど見られてません。

ちなみに影も出さないように設定しています。

 

ひとまずこんなところでしょうか。

あとはマテリアルは出来るだけ1つのフォルダにまとめるとか、スクリプトもGetComponentはUpdate関数内に書かないとか、軽量化の方法は色々ありますが、それはまた別の機会があれば書きたいと思います。

ちなみにこのゲームの場合、水の表現(水面の反射)もかなり重くしている原因なのですが、これを別の表現方法に変えてしまうとゲームの見栄えがかなり悪くなっていまうので、今のところはここだけは変更せずにいきたいと思っています。リリース後に動作が重いという意見が圧倒的に多いようならばもちろん変更はしていきますが。

 

スポンサーリンク

スポンサーリンク

LINEで送る
Pocket