【Unite 2016 Tokyo】運営中のモバイルゲーム『ドラゴンファング』をNewニンテンドー3DSへ移植…二画面対応にボタン操作など考慮する点とは


2016年4月4日~4月5日の2日間、東京・お台場にて開催された、国内最大のUnity公式カンファレンスイベント「Unite 2016 Tokyo」。本稿では、本イベントの2日目(4月5日)に行われた「運営中のモバイルゲームをNewニンテンドー3DSへ移植中!よくある問題とその対策」と題された講演の模様をお届けする。

登壇したのは、ユニティ・テクノロジーズ・ジャパン合同会社の黒河優介氏。同社は現在運営中の『ドラゴンファング~竜者ドランと時の迷宮~』を、Newニンテンドー3DSへ移植するためのサポートを行っており、今回はその過程で感じた問題点、そしてノウハウを紹介してくれた。

 

■二画面対応にボタン操作、WebViewの代価手段…移植時に考慮するべき様々なこと


まず前提として、Newニンテンドー3DS向けのソフト開発がUnityでできることを黒河氏は解説。「Unity for Newニンテンドー3DS」はUnity5ベースで動作し、こちらは任天堂への開発者登録をすることで取得できるという。また、講演の題材になっている『ドラゴンファング』は、運営型のローグライクRPGとなる。2Dメインでほとんどの描画をNGUIで構成、一部にはSpriteStudioで豪華な演出も加えられている。
 
そんな『ドラゴンファング』移植の際は、大きく分けて7つの考慮することがあったという。具体的には、「IL2CPPでの動作のみサポート」「二画面対応」「解像度変更対応」「ボタン操作への対応」「WebViewの代価手段の検討」「Shader対応」「少ないメモリ空間」だ。



IL2CPPのみの対応という点だが、この環境下だとEmitなどの動的に命令を生成する機能が使えない。また、各種アセットについてもNewニンテンドー3DSへの考慮がされていないため、defineを見直す必要があると話す。一方で、iOSも製品リリースとなるとIL2CPPのみなので、これができていれば大きな問題にはならないとの見解も示した。

次に二画面対応は、上下の画面表示用カメラをそれぞれ1つずつ用意する必要がある。『ドラゴンファング』ではそれぞれに別シーンを用意し、パーツ単位で使い回すことで解決したという。画面表示でもうひとつ考えなければいけないのは、上画面の立体視対応だ。立体視機能を使うかどうかをPlayerSettingsにて変更可能で、今回は立体視を使わない方向で開発を進めたとのこと。



Newニンテンドー3DSへの移植となると、上下画面の解像度も懸案事項だ。それぞれの画面は上が400×240、下が320×240となっており、テクスチャの解像度を下げて表示対応する必要がある。解像度変更自体は、Textureのinspector上で指定することが可能。だが『ドラゴンファング』では、ファイルパスのルールに応じてTextureの最大サイズを変更するツールを独自に作成。該当するルールがあったファイルのみ、指定されたTextureサイズにしていったという。このツールのおかげで、特定のファイルだけ解像度を下げないなどの対応も可能になった。

そしてボタン操作は、3DSをはじめとするコンシューマ移植で得られる大きなメリットのひとつだ。「Unity for Newニンテンドー3DS」はもちろんボタンへの対応も可能で、InputManagerからボタン操作を取得できる。ただし、どうボタン操作を行うかは二画面化対応と合わせて、企画段階でどうしていくかの検討がいるみたいだ。

一方で、スマートフォン版から削らざるをえないのが、特に運営型ゲームでは定番のWebViewである。HTML表示をそのまま持ってくることができないため、フォーマットを決めて、テキストや画像を表示する専用ダイアログの作成に迫られたそうだ。



またNewニンテンドー3DSでは、プログラマブルなpixel shaderがなく、固定機能の組み合わせで表現される。そのため、中には上手く絵が出ないケースもあるそうだ。『ドラゴンファング』においては大きな問題はなかったものの、今後移植を検討する際は、検討する必要もあるという。

 

■最大の障害は少ないメモリ空間


ここまでの解説だけでもたくさんの苦労が伺えるが、それでも問題は残されている。上述したとおり解像度は下げたものの、それでもまだメモリ空間は不足していたのだ。黒河氏は「運営型のモバイルゲームでは当たり前だった作り方が、実は多大なメモリ負荷になっている」と指摘。そのため、使用メモリの削減に向けて、さらに手を加えることになったという。

まずは巨大なJSONデータの対応だ。現在のモバイルタイトルで普及しているJSONフォーマットだが、これがかなりのメモリを持っていったそう。JSONを扱うアセットが、一度DOMツリーに展開してからアクセスさせることが原因であり、JSONデータサイズの倍以上のメモリが消費されている。ここでは、ゲーム設定に関するマスターデータをProtocol Buffersに変更。データサイズが半分以下になったほか、直接オブジェクトに値を入れることになったため、使用メモリは激減した。

次にwww.textureによるバナー表示も、メモリ消費という観点では問題点がある。wwwのtextureは無圧縮でメモリ上に展開されるため、大きな負荷がかかる。そこで『ドラゴンファング』では、アセットバンドルとして作成して、表示する方法に切り替えを予定しているとのことだ。

ローグライクRPGである『ドラゴンファング』独特の問題点として、マップの1マスごとに、Sprite付のGameObjectが生成されていた点もある。いくつかのレイヤーに分けて表示もされているので、相当数のGameObjectとSpriteがシーン中に存在している状態だ。これもまた、メモリ空間確保のためには修正しなければいけない箇所だった。黒河氏は、1つのGameObjectでマップのレイヤーを一括で表示するNGUI拡張機能を独自で実装。このおかげで1MBほどのメモリ削減に成功したという。



以上が『ドラゴンファング』でのメモリ空間対策となる。だが、ゲームによってメモリを圧迫する箇所も当然変わってくる。ということで最後に黒河氏は、メモリ周りボトルネックの探しかたを教えてくれた。同氏はUnityが提供するMemoryProfilerを使ってメモリの情報をチェック。Deep Profileを利用して、どこでメモリを消費しているのかも細かく確認していったとのこと。「メモリが足りない場合は地道な見直しが必要です」を黒川氏は語り、講演を締めくくった。




 
(取材・文:ライター  ユマ)