#本格スマホRPG『アナザーエデン』開発の裏側を包み隠さずお話します 〜コード資産も無く、チームとしての経験も豊富ではない中エンジニアはどう挑んだのか〜
##講演者
阿部 智司 さん(グリー株式会社)
井田 勝 さん(グリー株式会社)
##講演内容
###アナザーエデンの概要
- 2017年4月12日にリリース
- 現時点で300万DL
- 開発開始は2015年4月
- 現在は2~3週間の頻度でバージョンアップを行っている
###開発環境
- Mac
- git
- Jenkins
- Cocos2d-x
- Spine
- LWF(Lightweight SWF)
- Cricret Audio
- CRI Sofdec
###開発人員
約60名でアート職が一番多かった。
リリース時期までのコンシューマ開発経験者が6名程度しかいなかった
###開発中の課題解決と現在
- 開発開始時
10名程度の人員で開発を開始し、まず初めに目指すゴールの共有を行った。
1ヶ月間で2DライクなRPGを作成し、飛び出す絵本のような表現を目指して開発を行った。
- トライアルアンドエラーを効率よく
動作確認→データ入力→長いアセットビルド→アプリビルド→インストール
このPDCAサイクルを効率よく回す必要がある。
- Furutyを使用
MacOS上でネイティブに動作するゲームクライアント
実機/MacのSchemaを切り替えて動作するようにしている。
通常ゲームモードとマップ編集モードの2種類で動作するように行っている。
- 通常ゲームモード
・製品版と同様の動作を行う
・各種デバッグ機能を搭載しており、デバッグ関連だけでも100カテゴリに及ぶデバッグ項目を用意
・約300ファイルに上るデバッグ用コードが存在
・mac上で動作するため各種キーボードのショートカットを用意
- マップ編集モード
・通常モードに編集用UIを被せ、移動経路の設定やオブジェクト配置などのエディット機能
・配置情報などのデータは開発中はjsonで出力し、最終的にはFlatBuffersで出力を行っている
- イベントスクリプト
・各種イベント(フィールドやクエストなど)をLuaスクリプトを使用して作成
・約450命令に上るC++の命令処理が存在している。
- マップ作成
・上記のマップ編集モードを用いてデータを作成している。
・壁と床の種類はそれぞれ4種類ずつ
・一番重いマップではオブジェクトが1900個ほど配置されているとのこと
###ゲーム開発未経験者の苦悩と闘い
- バトル部分を担当
バトル部分のコード資産が無い状態で始めたため、スクラッチで実際に触るところまでとにかく
実装、仕様や演出のブラッシュアップを行っていた。
レベルデザインを行えばいずれは面白くなるはずを計5回繰り返して完成。
最初はアクションゲームとして実装を行っていたが、2016年にある事件が発生し、
ユーザーにアクション制かターン制かのアンケートを行い、ターン制ゲームとして作ることとなった。
###その他の課題
エリア切り替えなどをシームレスで実装することとなったため、
切り替わるときのカクツキの対策を念入りに行っていた。
- 原因
・膨大な量のアセットをロードする際にcocos2d-xのI/O処理がブロッキング処理だった。
・JSON形式のファイルのパース処理が重い
- 対策
・独自スレッドを立ててロード処理を非同期で行うように対応
・パース処理が重たいのでバイナリ形式のファイルに変更
- さらなる課題
非同期処理に切り替えたことにより、クラッシュが頻発するようになってしまった。
そこでXcodeのAddressSanitizerを使用して原因の特定修正を行った。
###作業の効率化
作業の効率化を行うために以下ものを実装
####Hubotで実装したchatbot
- 定型業務のサポート
- アプリのビルド
- デプロイ
- ビルド
- 各種検索
これらをチャットベースで行えるように対応
####マスターデータの入力ミス
マスターデータはエクセルベースで作成を行っている。
また、バージョン管理システムがgitを使用しているためロックすることが出来ずに
巻き戻りやコンフリクトが発生してしまっていた。
Excelの差分なので修正差分を表示することが出来ないため、
ロックや差分ができるようなものを作成して運用を行っている。
##まとめ
コード資産が無い状態で開発を行った際の問題点や
コードではない部分の問題点のお話を聞くことが出来、
非常にためになりました。開発環境が無いなら作るという
チーム全体の意思やゴールを明確化していた
部分などどのような開発でも応用が利くものと思っています。