【Unity】プラットフォームの性能差を意識してゲームを作っていくとグッド
Unityではマルチプラットフォームに向けたビルドが可能です。スマホ向けにもビルドできますし、PS4やSwitch向けにもビルドできます。
だからと言って無闇にビルドすると、実機テストしたときに「あれ……? なんか不自然……?」と感じることもあります。
プラットフォームには性能差があるので、それぞれのプラットフォームに向けたチューニングが必要になります。プラットフォーム間の性能差もありますし、同じプラットフォーム内でも性能差があったりするのでその点は意識しておくと良いかもしれません。
プラットフォーム内の性能差
ちょっと前にスマホをiPhone6からiPhone SEに替えたのですが、性能の違いにびっくりしています。
ブラウザの読み込みも速いし、アプリの起動も速いし、アプリで遊んでいても落ちないしと良いことずくめ。3Dのゲームを60FPSで動かしているのに処理落ちしないのはびっくりしました。
流石に5年前のスマホだとスマホ界では化石のような存在ですから「なんで開発者がそんなスマホ使っとんねん」という感じですが、世の中には「まだいけるっしょ」とスマホを買い換えない人もいるんですよね。
スマホは1年ごとに性能がどんどん進化していきます。アプリとしてゲームをリリースすると、アップデートしていく過程で新しい端末に対応した調整が必要になってきます。
性能差が現れやすいプラットフォーム
冒頭では「スマホ向けビルド」と一括りにしましたが、一番性能差が現れやすいのがスマホ向けのゲームです。
PS4やSwitchは元から同一の性能(あるいは2種類)のマシンがユーザーの手元にあることがわかっているので調整もしやすいのですが、スマホはユーザーごとの性能差が顕著に現れます。
私のように昔のスマホでも気にせず使う人もいれば(ごめんなさいホントは気にしてました)、最新のスマホをどんどん使っていく人もいます。
ターゲットとなるユーザーの行動がどちらに当てはまるかによって、ゲームの実装に使える機能も異なります。
待ち時間の違いが意識に影響を与える
また、実際に同じアプリをiPhone6とiPhoneSEで起動して比較したのですが、iPhone6では起動に10秒くらいかかっていたアプリがiPhoneSEでは2秒くらいまで短縮されていました。
この待ち時間の差はゲーム内のロード時間に対する私の考え方にも影響を与えました。
元々起動に時間がかかるつもりでいるのならゲーム内でロードに時間がかかっていても気になりませんでしたが、サクサク動く端末ではロード時間も短い方が嬉しいんです。
演出としてロード中の表示などを行うことがありますが、この待ち時間についてもよく確認する必要があります。
次のシーンが読み込まれる心の準備を行う時間と、端末の性能から想定されるロード時間とのバランスを考えながら調整していきましょう。
デフォルトのフレームレートも違う
iOSではデフォルトのフレームレートが30FPS、Androidでは60FPSと、プラットフォームによってデフォルトのフレームレートも異なっています。
ゲームを作る時にスクリプトからフレームレートを指定することも多いですが、これは忘れずに調整しておきたいところです。
フレームレートが変わるということは1フレームで許容される処理時間も変わるということです。場合によっては処理の内容も変更したりする必要があるかもしれません。
プラットフォームによっては使えるCPUのコア数も違いますから、パフォーマンスの向上などに使える仕組みも切り替わるかもしれません。例えばマルチスレッディングが可能なくらいにCPUを使えるのであれば、C# Job Systemを採用し、Burstを使ってコンパイルする方法もあります。そうすると当然ソースコードも変わってきますから、調整が必須になります。
マルチスレッディングに対応していないプラットフォームであれば、本来別のスレッドでやって欲しい処理をメインスレッドでやろうとして逆に待ち時間が増えてしまう、なんてこともあるので、リリース対象の端末のCPUがどうなっているのかも調べておく必要があります。
使えるグラフィックライブラリの違い
新しい端末では比較的新しいグラフィックライブラリを使えます。シェーダーに関してもリッチな表現ができたりするので、ゲームの見た目が大きく異なってきます。スマホ向けゲームでは容量の問題であまり大きなテクスチャーを使いたくないのが正直なところで、かわりにシェーダーやレンダリングパスの力を使って見た目を向上させる方法があります。
スマートフォン向けのゲームでは基本的に容量を増やさない方が好ましいです。というのも、アプリのダウンロードを行うことで月の通信量を使ってしまうためです。「ゲームアプリをダウンロードしよう!」と思う人の多くはWi-Fiの環境を整えているかと思いますが、それでも容量は抑えておきたいところです。
また、記録する端末側のストレージもそう多くはないというのが現状です。例えばiPhoneSEの一番安い端末では64GBになっていますが、アプリ以外にも音楽、写真、動画を保存しているとあっという間にストレージが埋まってしまいますからね。
このサイズに影響を与えるのがテクスチャーです。できれば綺麗な画像をマテリアルに貼ってより綺麗な画面にしたいところですが、解像度の大きい綺麗な画像を使うとその分容量が膨らんでしまいます。なので、なるべく解像度を落として容量の小さい画像を使うのがベスト。
この見た目を補うためにシェーダーやレンダリングパスの力を使いたいわけです。となると、より新しくて綺麗に表現できる方法を採用する場合は、端末側で対応するグラフィックライブラリが用意されていないといけないわけで、この辺も考慮しないといけないんですね。
まとめ
処理時間やゲーム画面の見た目の観点からプラットフォーム間の性能差について考えてみました。シンプルに結論を述べるなら、「リリース対象のプラットフォームの端末情報はきちんと調べておきましょう」って感じです。なんとも当たり前な結論に……。
マルチプラットフォーム向けにビルドできるUnityですが、だからと言って何も考えず全てのプラットフォーム向けに最適化された状態になるわけではないので、しっかりと調整するようにするとイケてるゲームデベロッパーになれます。
ゲーム開発の攻略チャートを作りました!
-
前の記事
ゲーム作りって泥臭い! スマートに見えて地味な作業もたくさんなんです 2020.09.10
-
次の記事
実は序盤はチュートリアルになっていたドラクエ1の心遣い 2020.09.12
コメントを書く