QualiArtsのUnity開発を支える基盤の紹介
「QualiArts Advent Calendar 2020」 1日目担当の住田です。
今年もQualiArtsでは社内のエンジニアによるアドベントカレンダーを行います。フロントエンドやバックエンド、技術組織などQualiArtsで培われたさまざまな技術について毎日発信していきますのでぜひチェックしてみてください。
▼「QualiArts Advent Calendar 2020」
https://qiita.com/advent-calendar/2020/qualiarts
本記事では、QualiArtsがUnityの開発をしていく上で注力している技術基盤の運用と開発についてご紹介いたします。
基盤駆動のUnity開発
QualiArtsはAmebaゲームを前身として2016年に会社化したスマートフォンゲームの企画・開発・運営とIPの企画・開発・プロデュースを行う会社です。「オルタナティブガールズ2」など、これまでにいくつものUnityプロジェクトの開発を行ってきました。
人数やプロジェクトの数を増やしていく中で開発の効率化を進めるにはどのプロジェクトでも必要な機能や専門的な技術を要する機能を基盤化することが重要になってきます。QualiArtsでは基盤の開発を積極的に行っています。3D、UI、通信、AssetBundleなど機能単位で基盤化し、Unityで開発を行うプロジェクトはまず基盤の導入から行う基盤駆動の開発が基本のスタイルとなっています。
どのように基盤を導入しているのか、どのような基盤を開発しているのかをここから順に説明していきます。
gitとUPMを活用した基盤の導入
QualiArtsではプロジェクトは全てGitHubのリポジトリとしてOrganizationに紐付けて管理しており、基盤のリポジトリも同様の扱いをしています。基盤を導入する時は2つの導入方法があります。1つがgitのsubmoduleとしてプロジェクトのリポジトリに紐付けを行うものです。submoduleを活用することで基盤側の更新やプロジェクト固有のパッチに対して柔軟に対応できる形となっております。
基盤の中には別の基盤に依存した作りになっているものもありますが、それら基盤内のsubmoduleとして導入して解決することができます。なので、QualiArtsのsubmoduleは入れ子構造になっている物が多いです。
そして2つ目がUnity Package Manager、通称UPMを活用する導入方法です。UPMは最近のUnityで提供されたパッケージの管理機能で、エディタ上のUI操作でアセットやライブラリといった機能の追加や削除ができるようになっています。
このUPMは最初はUnityが提供するパッケージ専用となっていましたが、最近では自前でレジストリを用意して紐付けることでサードパーティーが提供するパッケージにも対応できるようになりました。QualiArtsでは社内用のレジストリを作成し、基盤側で更新があった時に自動でpublishされる仕組みを導入しています。
具体的にはGitHub Actionsを活用して基盤側の更新にフックして自動でpublishを行います。publishした後はSlackへの通知を行うため、エンジニアが更新を認知することが可能です。新しく基盤を作った際にも、GitHub Actionsのyamlを使い回すだけでこの仕組みに載せることができるのでとても便利です。
現在QualiArtsにはこの仕組みを用いて21個のパッケージがアップロードされています。基盤化の障壁が低いこともQualiArtsに基盤ベースの開発文化を根付かせている要因の一つです。
開発しているUnity基盤
ここまで、QualiArtsでは基盤の開発が活発で多くのリポジトリが存在しているということを説明してきました。実際にどのような基盤の開発が行われているのかいくつか紹介します。
Octo
OctoはUnityでアセットを動的に配信する時に用いるAssetBundleの配信基盤になります。Octoはアセットの管理と配信機能、および汎用的なロードやキャッシュ、メモリ管理といったUnityクライアント側の機能を提供してくれます。容量の制約や動的なコンテンツ更新の多いスマートフォンゲームを開発していく上でアセットの配信機能は必須と言っても過言ではありません。「オルタナティブガールズ2」以降のQualiArtsでのUnityプロジェクト全てでOctoが導入され、開発の効率化に大きく役立っています。
Octoはプロジェクトを横断して技術的なサポートや基盤の開発を行うチームが専任で開発しており、現在でも各プロジェクトの要望ベースで機能追加や改修が行われています。「CEDEC2017」でも発表をしていますので、開発の経緯や設計についての詳細に興味のある方はこちらの記事を参照してください。https://creator.game.cyberagent.co.jp/?p=4791
3D描画基盤
QualiArtsでは3Dコンテンツの制作技術と美少女の表現力を強みとしています。その売りである3Dの品質をしっかりと担保するために、QualiArtsでは3D描画基盤の開発を進めています。
3D描画基盤の開発はテクニカルアーティスト室という3Dコンテンツの表現力の追求や、パイプラインの整備といった役割を担う横軸組織で行っています。
美麗なグラフィックとパフォーマンスの効率化という難易度の高い部分を基盤化しており、プロジェクトごとにこれを拡張することで、要件にあった高品質な描画が実現できています。また、プロジェクトごとの拡張はテクニカルアーティストが中心となって行っているため、Unityエンジニアはゲームの実装に集中することができます。
このほかにもPlayable GraphやAnimation Jobsなど昨今のUnityが提供するさまざまな新機能も活用しており、多くの表現が可能になっています。
UI基盤
アプリケーションを開発する上で必須なのがUIの開発です。QualiArtsではこのUIの開発についても基盤化を進めています。画面の階層構造は、リストやポップアップなどUIの機能が汎用的に使えるようになっています。UIはUnityの開発において一番人数を割く部分のため、基盤化されていることによる恩恵がとても大きいです。どのエンジニアが実装しても同じようなコードになるため可読性及び再現性の高い開発が実現できます。
QualiArtsのUnityエンジニアが利用する基盤の中でも一番頻度の高い物がこのUI基盤だと言えるでしょう。UI基盤の開発は専任のエンジニアではなく、プロジェクトに所属しているエンジニアがプロジェクトの要望ベースで行っています。個々のエンジニアがPRを出し、UI基盤の開発をリードしているエンジニアのレビューを介して機能が追加されます。
ADV基盤
QualiArtsの開発するスマートフォンゲームにはシナリオを読み進めるアドベンチャーパート(以降ADV)があるゲームが存在します。
ADVはキャラクターと舞台を元にシナリオを読み進めるパートなので、シナリオに沿ってキャラクター、背景、カメラ、音などを構成していく必要があります。しかし、シナリオ全てに対してエンジニアが構成するというのはなかなか現実的ではありません。一般的にはスクリプターと呼ばれるこれらの構成を行う専任の方をチームに加え、エンジニアがスクリプター用のツールを作ることが多いのですが、そのツールを制作する大きな手助けとなるのがADV基盤になります。
QualiArtsのADV基盤は「オルタナティブガールズ2」のADV制作で用いた実装やノウハウを基盤化した物で、現在は専任のエンジニアが機能改修を行っています。ADV基盤にはシナリオの進行やキャラクターや場面のディレクションをGUIベースで設定する機能が用意されています。拡張がしやすくなっているのが特徴で、プロジェクト独自の演出を加えたい場合にも柔軟に実装を行うことが可能になっています。ADV機能ではプロジェクト固有の演出がありがちで、そういったクリエイターの要望にも応えられる基盤となっています。
最後に
QualiArtsでは開発を効率化し品質を高めるべくさまざまな技術の基盤化に注力しています。今回紹介した基盤はごく一部で、通信やデザインツールとの連携などプロジェクトを跨いで活用できる技術が多く基盤化されています。プロジェクトでの開発を元に基盤は常に進化し続けています。常に技術を追求し開発を支え続ける基盤はQualiArtsの強みであり、大きな資産です。
それでは、明日以降の「QualiArts Advent Calendar 2020」もよろしくお願いいたします。