『ドラクエウォーク』が目指した、“位置ゲー”ならではの負荷低減と最適化
ETSのメリット・デメリット 頻繁なアップデートに注意
ECSを利用して気づいた利点として、Entityの生成・破棄が高速というのは良かった。やはりGame Object実装の時は生成・破棄の処理が重いようで、カメラに映らなくなった領域の木は非アクティブにしてオブジェクトプールに保存、再びカメラに映る時にプールから取り出して再利用するようにしていた。ところがカメラを回転させた時に、たまにカクカクと引っかかる時があった。Entity実装に変えてからは、普通に破棄しても引っかかることがなくなったため、かなり改善したようだ。
ビルボード実装自体は、かなりシンプルになったと思う。Entity実装だと、Entityの生成・破棄とビルボード処理が分離されているので、かなり取り回しが楽になった。Game Object実装の場合は、ビルボード生成時に、そのトランスフォームをまとめて管理するコンポーネントに渡さないといけなかったりで地味に面倒だった。ECS(DOTS)はパフォーマンスに期待されがちだが、ものによっては実装がシンプルになるのも良い点。Render Meshの更新も簡単にできたのが良かった。
このゲームはイベント中にフィールドの見た目をガラッと変える場合もあり、Render Mesh内部のメッシュやマテリアルを更新するだけで実現できた。Game Objectで実装する場合のMesh FilterのShered Mesh、Mesh RendererのShered Matterialを更新するのと同じ感覚だった。ECSにすることで描画周りが面倒になるのではないかと思ったが、そうでもなかった。
将来的な不安要素としては、Unityやパッケージのアップデートで発生する問題を抱えることになる。Preview機能を使うということは、頻繁なアップデートが予測されるので、パッケージのアップデートが終わる頃には大幅な変更になっている可能性が高い。またアップデートした後もまだPreview機能だったりすると、Unityや他のパッケージとの組み合わせでも問題が発生するかもしれない。
あまりないと思うが、ストアの規約が変更されて、それに抵触してしまうかもしれない。考えたらキリがなく、大きな問題が起こったら、作り直すくらいの気持ちでいた方がいいだろう。そのためPreview機能を使う場合は、ゲーム本体から切り離せるくらいの部分に留めておくのが良さそうだ。
最後に、モバイルでも使えたのはありがたかった。特に古い機種でも動くので、CPUの負荷やメモリ使用量の削減やバッテリー消費の削減にも、より効果が出たと思う。今回、静的オブジェクトとビルボードでしか使っていないが、物量が多いシミュレーションとかでも十分に使えそうだと感じた。クラッシュなどの不具合も、想像していたより全然発生しなかったものの、Game ObjectでやっていたようなUnityのエディター機能は使えないため、チーム開発には不向きだと思った(これは将来的には改善される予定らしい)。
■真狩祐志
東京国際アニメフェア2010シンポジウム「個人発アニメーションの15年史/相互越境による新たな視点」(企画)、「激変!アニメーション環境 平成30年史+1」(著書)など。
CEDEC2020
ドラゴンクエストウォークにおける Maps SDK for Unity とECS利用事例
『ドラゴンクエストウォーク』