Windows 10、DirectX 12、Kinect、PlayStation 4、VRヘッドセット対応、Unity 5への移行に見るUnityの可能性と課題:Unite 2015 Tokyoリポート(3/3 ページ)
クロスプラットフォーム対応のゲームエンジンとして多くのユーザーを抱える「Unity」。このUnityの開発者向けに、最新動向と技術情報を紹介する公式イベント「Unite 2015 Tokyo」が、4月13、14日に東京お台場で開催された。この記事では、4月13日に行われた、ソニー・コンピュータエンタテインメント、マイクロソフト、コロプラによる各セッションのダイジェストをお伝えする。
コロプラの開発現場から見た「Unity 4.x」から「5」への移行における「落とし穴」
Unityの最新版である「Unity 5」では、より高い表現力を持った作品の開発を可能にする多くの新機能が搭載されている。ビジネスとしてUnityによるゲームを作っている開発者にとっては魅力的な一方、以前のバージョンで作った作品が問題なく動作するかどうかは極めて重要な問題である。複数のバージョンに対する開発、保守、サポート体制を維持し続けることは、人的リソース面、コスト面の双方でビジネスに大きなインパクトを与えるためだ。
Unite 2015では、コロプラの技術開発チームに所属する池田洋一氏が登壇。同社のプロダクトである『白猫プロジェクト』をUnity 4から5へ移行した事例を通じて、その中から得られた知見や、発生する問題への対処方法を紹介した。実際に移行に取り組んだ現場の「生の声」を聞けるセッションとあって、多数の来場者はメモや写真を撮りながら熱心に聞き入っていた。
同社では、以前、iOSのバージョンアップで画面の回転処理の変更が必要になった際、『スリングショットブレイブス』というゲームにおいて、Unityのバージョンを上げる作業を行ったという。結果的に、複数バージョンのアセットバンドルを管理することになり、チェックコストの増加などから大変な苦労をしたそうだ。
『白猫プロジェクト』は、これまでUnity 4.5で作成されていたが、4.6.2以降ではiOS向けの64bit対応が行われており、そのサポートに合わせて「今後、バージョンアップが必要になる可能性を考慮して、できる限りバージョンを上げておく」方針を採ったことが、Unity 5への移行を進めるきっかけになったという。実際の問題として、Unity 5では4から多くの仕様変更が行われており、細かい部分での処理変更やバグ対応など、かなりの作業が必要になっているようだ。
池田氏は、Unity 4から5への移行プロセスとして「エラーを取る」「うまく動かないところを直す」「(Unityの)新しいバージョンが出るのを待つ」の3つを挙げた。
エラーを取る
まず「エラーを取る」というのは、バージョンアップで仕様が変更されたために発生するエラーを直していく作業になる。最初に問題になるのは、cameraやrigidbodyなどにおいて、小文字によるアクセサー系がなくなっていることだ。これについては、「API Updater」と呼ばれるツールで自動的に修正が可能になっている。ただし、この際にも一点問題があり、「AddComponent(String typename)」のコードをこのツールで自動アップデートすると、Unity Editorでは実行できるが、端末向けにビルドした際に実行ができないコードが生成されてしまうという。この問題を回避するためには「System.Type.GetType("Typename")」メソッドを利用して、あらかじめタイプを取得しおき、それを引数にして「AddComponent」を呼び出すという処理に書き換えておく必要があるという。
その他一部のメソッドについて、例えば「InteractiveCloth」は「Cloth」、「ClothRender」は「SkinnedMeshRenderer」といった形で変更が行われており、その利用方法にも変化(例えば、「Cloth」では頂点固定の方法が変更されている)がある。また、TextureFormatの一部が削除、AnimatorStateMachineのGetStateMachineが配列アクセスに変更、BB10Playerの削除などの変更が行われているため、エラーを確認しながらその都度直していく作業が最初の段階で必要になる。
うまく動かないところを直す
次の段階は、コード上はエラーが出ていなくても、開発者の意図通りの動作をしていない部分を修正していく作業だ。『白猫プロジェクト』においても、複数の修正が必要になったという。以下に、その一部と、実際の対処方法について紹介する。
- 症状:タイトルのアニメーションが動かない
理由:Unity 5では「ルートモーション」の仕組みが変わっている。従来と同じ挙動にするには、Animator上で「Apply Root Motion」のチェックを外す - 症状:表示するグラフィックのアウトラインが膨らんだ
理由:「Scale」の仕様が変更されていた。「UnityCg.inc」の中にある組み込みのマクロを使うことで問題が解消できる - 症状:Unity 4.xでは問題なかった「CubeMap」が5では反映されない
理由:「TexGen」がなくなった。これについては、VertexShaderを使ってCubeMapのUVを自分で計算することで解決 - 症状:クエスト選択画面の背景が黒くなる
理由:「RenderTexture」へ描画するカメラの破棄に関する処理が変わっている。カメラを削除すると、RenderTextureそのものも一緒に消えてしまう。Unity 5で同様の結果を得るには、CameraからRenderTextureの参照を外してから、Cameraを破棄(Destroy)する
その他にも、「厚みのない板にモーションが設定されたキャラクターを表示させた場合に表示が崩れる」という不具合があったという。これはiPhoneだけで起こる現象で、場合によってはiOS自体をクラッシュさせる重大なものだった。調査した結果、この不具合はOpenGL ES 3.0,Metalでのみ発生していたためOpenGL ES 2.0のみにすることで回避できることが分かった。しかし「根本的な原因は不明」という。その他iOSでは「DynamicBatchingで強制終了する」という、同じく原因不明の不具合があり、こちらも機能をオフにすることで対応したという。
池田氏が「致命的だった」と話すのは「CharacterController」の挙動そのものが変更されていた点だ。具体的には、キャラクターの衝突判定が変わってしまっていたため、マップ上に設けていた「仕切り」を、主人公キャラクターが全て「乗り越えて」動き回れるようになってしまったのである。これについては、全ての「SphereCollider」を「CupsulCollider」に変換することで対応した。「SphereCastでチェックする方法もあったが、できるだけプレーヤーは修正しないようにした」(池田氏)という。
また、シーンに適用したLightMapについて「動的切り替えができない」という問題も起きた。これについて、『白猫プロジェクト』では冒頭のカットシーンでのみLightMapを使っていたため、使わない方式に変更したという。「今後は3Dツール上でLightMapを付けてしまい、UnityのLightMapは使わない方向も検討している」という。
(Unityの)新しいバージョンが出るのを待つ
ここまでの作業で対応が不可能なバグや仕様については「(Unityの)新しいバージョンが出るのを待つ」ことになる。『白猫プロジェクト』の移行作業においては、「Animationにおいて、マテリアルのαアニメーションが反映されない」というバグが発見され、これについてはすでにリポートを行って修正を待っている段階だという。
また、Unityの「IL2CPP」(C#をC++に変換する技術)を利用してiOS 32/64bit両対応のアプリを作成した場合、バイナリサイズが非常に大きくなってしまうという仕様上の問題も残っている。Unity 5版の『白猫プロジェクト』では、IL2CPPでアプリを作成した場合、サイズが200MB近くに達したという。App Storeでは100MBを超えるサイズのアプリはWi-Fi経由でしかダウンロードできないため、大きな問題になる。Unity側でも、この問題は把握しており、現時点ではUnity 4のパッチベースで対応が続いている。他のアプリでは「4.6.4p2」で「4.6.2」と比較して半分以下のサイズになっているという実績もあるため「5でも対応されるのを待ちたい」とする。
池田氏は最後に、Unity 5版『白猫プロジェクト』について、「カラー(アルファ)アニメーションのバグ」「IL2CPPのバイナリサイズ削減」「LightMapへの対応についての社内方針」といった課題がクリアされれば、リリースが可能になるだろうという見解を示した。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- UnityアプリをWebGL、UWP、Android、iOS用としてビルドしてみた
Unityで3Dゲームを作るまでのいろいろな処理を解説する連載。最終回はアプリをWebで実行できるように書き出す方法やWindows上でUWP、Android、iOS用などにビルドする方法について解説する【Windows 10、Unity 5.6に対応】。 - ハッカソン、デバイス、海外展開、人材育成――ゲーム開発で私たちは今何をすべきか
2015年1月23〜25日、世界中で同時に行われた48時間にわたるゲーム開発ハッカソンの模様と、ゲーム開発がテーマのトークセッションをいくつかダイジェストでお届けする。 - ゲーム嫌いも知っておきたい3D CG/VRのエンタープライズ活用事例〜Unity Solution Conference 2014まとめ
ゲーム開発で有名なUnity。医療や建築、ヘルスケア、観光などゲーム以外の活用事例をイベントリポートでお届けする。 - Oculus Rift、Unity、Openframeworks...感覚器官フル稼働の仮想空間を実現する
学生のアイデアを具現化するツールの進化・普及と、感覚器官をフルに使う人工現実感。表現とインターフェースについての学生の挑戦から「思い付き」を実現する環境のいまを知ろう。 - Unity 4.2でBaaSを使って簡単にストアアプリを作るには〜CEDEC 2013「Unity on Windows 8」レポート
開発の概要や、プッシュ通知ができるライブタイルなどWindows特有の機能を追加する方法、事前審査テスト時の注意点なども。