【CEDEC 2018】大規模開発におけるUnityの“弱点”解消法が語られたポケラボの講演「SINoALICE -シノアリス-におけるUnity活用術」をレポート


一般社団法人コンピュータエンターテインメント協会(CESA)が、8月22日~8月24日までの3日間、パシフィコ横浜にて開催した国内最大のゲーム開発者向けカンファレンス「コンピュータ・エンターテインメント・デベロッパーズ・カンファレンス 2018」(CEDEC 2018)。

本稿においては、8月24日に実施されたポケラボによるショート講演「SINoALICE -シノアリス-におけるUnity活用術」の内容をお伝えしていく。こちらの講演にはポケラボのUnityエンジニアである加茂雄吾氏が登壇し、Unityでのゲーム開発におけるアドバイスが披露された。


▲Unityエンジニアの加茂雄吾氏。『SINoALICE -シノアリス-』の開発に立ち上げから参画し、Unityを用いたクライアント設計と実装を担当している。

自らを“Unity大好きおじさん”と形容する加茂氏は、ポケラボ内では社内のUnityエンジニア育成チームのコーチを務めた、自他ともに認めるUnityのスペシャリストだ。そんな加茂氏が本公演でテーマとしたのは「大規模開発におけるUnityの弱み」そして「弱みの克服法」である。

まず、加茂氏は「Unityの弱み」について、仕様上「同時に複数人で同じシーンを編集できないこと」を取り上げた。大規模なチームによる開発において、コアとなるシーンに触れられるのが1人だけとなると、開発スピードのボトルネックとなってしまう。

その克服方法として提示されたのが「マルチシーンエンディング」「メッセージシステム ExecuteEvents」「FSM(ステートマシン)」の3つ。ここでは、それらの詳細を個々に紹介していこう。



 

■マルチシーンエンディング


「マルチシーン」は、Unity 5.3で追加された複数のシーンを同時の編集する機能だ。これを活用すれば、ひとつの画面を個別のシーンに分割して編集することが可能となる。

ここで例に挙げられたのが『SINoALICE -シノアリス-』のマイページ画面だ。こちらでは、各画面で共通のヘッダーやフッダーなどをCommon Sceneとして分離し、MyPage SceneおよびDont Destory OnLoad Sceneと足し合わせる形で構成されているという。



また、別の例としてクエストシーンについても解説された。クエストシーンは、キャラクターのアクションなどを現すField Scene、ダメージなどの情報表示を担うUI Scene、それらの各画面に司令を送るLogic Sceneの3つに分割管理されているとのこと。






これら3つのシーンを別々のエンジニアが開発することで、これまで1人で開発せざるを得なかったボリュームあるシーンの製作を、複数人で分担可能となる。Logic Sceneを除く各シーンの開発ボリュームの差(コード量、およびオブジェクト数)にも大きな差はなく、均等なタスク調整も実現できているようだ。




こうした開発スピード向上にとどまらず、マルチシーンエンディングを用いた開発には、バグを低減する効果もあるという。

まず加茂氏は、バグが発生しやすい環境を「シーン内のモジュールが非常に密結合な状態にある状態」と定義。マルチシーンエンディングを用いて各シーンを明確に分割すれば、階層構造が強制的に保たれた疎結合なコードを実現できると語った。




 

■メッセージシステム ExecuteEvents


ExecuteEventsは、特定のインターフェースを持つコンポーネントを一括で操作する機能を持ったメッセージシステムだ。これを用いることで、一部のタスクを軽減することができる。

『SINoALICE -シノアリス-』においては、クライアントエンジニアとUIエンジニアがペアを組む形で画面を作るケースが多いようだ。こちらの開発は、その分担構造を前提とした内容となる。

加茂氏は実装例として、画面上に“報酬A”が表示され、アイコンタップで詳細画面に移行する構造を取り上げた。これを、報酬Aのアイコンにイベントリスナ(onClickなど)を登録したとしても、単に一度実装して完成するだけであれば問題ない。しかし、実装後の仕様追加が発生した場合、クライアントエンジニアとUIエンジニアの双方に追加タスクが生じてしまう。






こうした仕様変更は「ゲームの仕様を洗練していく過程で発生する事を前提」として、UI変更はView側のみで完結させるのが最善だ。ExecuteEventsを用いる事で、それが実現可能になるとのこと。

ExecuteEventsでは、ControllerとViewの間でインターフェイス(Event Handler)を定義し、Viewがイベントを送信し、Controllerが受信する形式を取っている。



以上の構造上、それぞれのコードは疎結合な形が保たれるため、先の例のような仕様追加が発生した場合でも、View側にのみ追加実装が発生する形を実現できるというわけだ。




▲実際に用いられているコードも公開された。
 

■FSM(ステートマシン)の活用


ここまでで解説された内容は、いずれも「疎結合なコード作成」を企図したものだ。最後となるFSMもまた、それを実現するための手法として紹介された。

ここで例に挙げられたのは『SINoALICE -シノアリス-』において、15対15のオンラインバトルが展開される「コロシアム」の画面だ。コロシアムは内には「フィールドモード」「蘇生モード」「ギルドシップモード」といった複数の状態が存在し、それぞれを管理する必要がある。





開発の当初は、各モードが密結合でバグ発生率の高い状態になっていたが、FSMを導入することでモード別に疎結合な実装を実現したという。会場では、実際に使用されている『SINoALICE -シノアリス-』のFSMが公開された。

各モードが明確に分割されており、モードの移り変わりが視覚的に理解できるのがFSMの大きな特徴だ。例えばFSM上で「蘇生モード」から「ギルドシップモード」へはラインが接続されておらず、直接的な遷移が発生しないことを示している。また、それらが互いを参照する事はなく、疎結合な構造を保つ助けとなっている。



このように、複数の状態を持つシーンの管理・製作でFSMを活用することで、コード内の複雑な状態変数・条件分岐を排除しする事が容易となる。

大規模開発に向かないとされるUnityだが、こうした機能の活用によって分解・分担が可能となる部分も存在する。加茂氏はそうしたUnityの有用性を紹介し、本セッションを締めくくった。




 
■『SINoALICE(シノアリス)』
 

公式サイト

公式twitter

App Store

Google Play



© 2017, 2018 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
株式会社スクウェア・エニックス
https://www.jp.square-enix.com/

会社情報

会社名
株式会社スクウェア・エニックス
設立
2008年10月
代表者
代表取締役社長 桐生 隆司
決算期
3月
直近業績
売上高2428億2400万円、営業利益275億4800万円、経常利益389億4300万円、最終利益280億9600万円(2023年3月期)
企業データを見る
株式会社ポケラボ
http://pokelabo.co.jp/

会社情報

会社名
株式会社ポケラボ
設立
2007年11月
代表者
代表取締役社長 前田 悠太
企業データを見る