今回はAndroidアプリの高速化・最適化について記事にしてみましたのでAndroidで動かしてみたけど「処理がすごい重い」、「画面がカクカクする」って方はぜひ読んでみてくださいね。
はじめに
今回、開発中のゲームをAndroidで起動させることにしたのですが、最初重すぎてまともに操作できるような状態ではありませんでした。
しかし色々対策を入れることで動くようになったのでその対策について本記事にまとめてみました。
スマホで動かしてみたけど「処理がすごい重い」や「画面がカクカク…」という方のためになれば幸いです。
最適化とは
最適化というのは簡単に言うと文字通り「最適な形」にするということです。
例えば処理が重いというのは「最適な形になっておらず、無駄な機能があるから重い」ということです。
基本的にその端末に合った処理形式に近づけていき、動作を軽くしていくという意味となります。
最適化をした経緯
なぜ最適化しようかと思ったかと言うと
「そろそろ一旦実機で確認しておいた方がいいかも…汗」
というプログラマーの直感が働いたからです。
そして急いで下記を対応してAndroidで確認することにしました。
- タッチ画面での操作UIを実装
- Android用のアプリ出力
そしてワクワクしながらゲームを動かした矢先、画面確認すると「1秒で1フレームぐらいしか動かない遅さ」だったのです…
これまで簡単なカジュアルゲームしか作ったことなかったので、シェーダーもデフォルトの軽いものしか使っていませんでした。そして今回もUnity様がいい感じに軽くしてくれるんじゃないかと甘い期待を持っていたんですが、さすがに世の中甘くはないということですね(笑)
元から重かった可能性
元から重かったんじゃないの?
と言われそうですが、パソコン版ではまったく問題なかったんです。
今はスマートフォンが普及していて、それでYouTubeも見れるし、アプリも遊べるし、動画の編集なんか出来てしまいます。なのでパソコンと出来ることとが変わらないという勘違いも生まれてしまいがちですが、パソコンのゲーム動かす性能はスマートフォンとは比べ物にならないということですね。
何が重いかを調査する
原因の特定には下記記事で紹介しているプロファイルという機能を利用します。
こんな感じの画面になります。
まずはこの機能を使って基本的に何が重いか目星をつけることにしました。
私の場合は「Graphics.PresentAndSync」というものが1フレームで大多数を占めていたため名前の通り「Graphics(グラフィック)」という名前から描画周りの最適化を試みました。
重い原因
今回のケースだと2Dゲームの癖に地形やオブジェクトにノーマルマップ(凸凹感を出す画像)やライティング処理が入っている少し重いマテリアルを使っていました。
そして、それが原因だと怪しんだ私は
そのマテリアルすべてをデフォルトのスプライトのマテリアルに戻してみました。
するとどうでしょう!
完全スムーズとまでは行きませんがギリギリ操作できるまでは軽くすることができました!
基本的に最適化ではこのように怪しいところを外してみたりするのが基本です。
怪しいなと思ったところはぜひ一旦外してみてくださいね。
コメント