120 Views
May 08, 18
スライド概要
講演者:向井 祐一郎(株式会社サイバーエージェント)
こんな人におすすめ
・Unityにおけるアクションゲームの開発に興味がある方
受講者が得られる知見
・Unityでアクションゲームを開発する際につくるべきツールの開発と活用事例
・Unityにおけるアクションゲームの開発事例
・開発時の苦労話
リアルタイム3Dコンテンツを制作・運用するための世界的にリードするプラットフォームである「Unity」の日本国内における販売、サポート、コミュニティ活動、研究開発、教育支援を行っています。ゲーム開発者からアーティスト、建築家、自動車デザイナー、映画製作者など、さまざまなクリエイターがUnityを使い想像力を発揮しています。
DAY2 2018/5/8 「リトルチャンピオンズ」 癖になるアクションゲームの開発事例 向井 祐一郎 株式会社CyberAgent / クライアントエンジニア
アジェンダ • ゲームの設計・実装について • ゲームの実装方針について • 物理演算について • ツール作りの事例 • リアルタイムなパラメータ調整機能 • ステージエディタ • Animate State Machine (動的な演出ツール)
向井 祐一郎 株式会社CyberAgent / クライアントエンジニア • 2015年度 株式会社サイバーエージェントに新卒入社 • 同年に株式会社アプリボットに出向、ゲーム開発に従事 • Unityでクライアントエンジニア [email protected] [email protected]
株式会社アプリボット • 株式会社サイバーエージェントの子会社 • 主にスマートフォンゲーム事業を展開 • 現在の新規開発はほぼUnityで開発
リトルチャンピオンズについて •かわいいキャラを操作してゴールへのルートを探すひらめきと、 アクション要素が盛り沢山な本格3Dアクションゲームです!
リトルチャンピオンズについて •2018年3月末にリリース •200種類を超えるステージ •プレイヤー間でリプレイを共有 •Unity 5.x メインで開発、終盤に Unity 2017.2.1 を導入
リトルチャンピンズのゲームの設計・実装
ゲームの実装方針について • コマンドパターンベースなアーキテクチャ実装 • ユーザ操作(方向・パワー調整、アビリティ使用)やゲームイベントを、コマンドで表現 • コマンドを介してゲームを進行させる 方向・パワー調整 アビリティ… コマンド ストリーム 方向調整 ユーザ入力 ショット アビリティ ゲーム
なぜ採用したのか • 実装要件に、リプレイ機能やゲームの途中復帰機能 があったから • 開発当初の要件にマルチプレイがあったため • リリース時には要件から外れた
リプレイデータの生成 • コマンドの内、ゲームを再現するために必要なコマンドを記録 • リプレイデータとする • 初期化情報に乱数のシードなども保存 コマンド ストリーム 保存 ショット ユーザ入力 アビリティ リプレイデータ ゲーム
リプレイの再生 • ユーザ操作の代わりに、リプレイデータから得られたコマンドを再生する ショット アビリティ リプレイデータ コマンド ストリーム ユーザ入力 ゲーム
ゲームの途中復帰機能の実装 • ゲーム中にアプリが落ちてしまった場合でも、 プレイ途中まで復帰する機能 • プレイ途中までのリプレイデータ(中断データ)を 高速に再生して直前の状態を復元する
マルチプレイの実装方針 • 発行したコマンドを、他のユーザと同期すればよい • コマンドストリームの部分で、コマンド同期を実装する 方向・パワー調整 アビリティ… コマンド ユーザB ストリーム ユーザA ネットワーク同期 ユーザC
物理演算について • UnityEngine.Physicsを使わずに、自前実装を行った • リプレイデータの軽量化や、後述するステージエディタのコリジョンの最適化に寄与
アーキテクチャ毎の差異 - 物理演算の自前実装の経緯 • アーキテクチャ(CPU)ごとに浮動小数点の扱いが異なる • コマンドパターンベースの実装では、端末ごとにリプレイ結果が異なる可能性がある • アプリケーション固有のビットの丸め処理を実装 リプレイA ショット アビリティ 端末ごとに 端末A シミュレーション リプレイA’ リプレイデータ 端末B
ガイドライン実装 • ショットの予測軌道を表示する機能 • ガイドラインの長さ分ショットのシミュレートを行う • 1フレーム中に、物理演算の更新処理を複数回行える必要
ガイドライン実装 - UnityEngine.Physicsでの問題 • Unityの物理演算(Internal physics update)を制御できない https://docs.unity3d.com/ja/current/Manual/ExecutionOrder.html
リトルチャンピオンズでのツール制作事例
リトルチャンピオンズでのツール制作について • ツール制作事例を紹介 • リアルタイムなパラメータ更新機能 • ステージエディタ • 動的な演出ツール
ツール制作の必要性について • 良いゲームを作るために、企画から実装、検証までのサイクルを多く回す必要がある • プログラマを介さない制作環境(ツール制作)が必要になる プランナ 企画 プログラマ プランナ 実装 検証 企画 企画 検証 企画 検証 実装 ツール制作 検証 企画 実装 プログラマ
データ駆動な設計 • ツールで制作したデータをAssetBundleで配信すれば、 アプリビルドが必要なく、機能追加やコンテンツ更新が可能に • スマホゲームの強みは運用ができること
リアルタイムなパラメータ調整機能
リアルタイムなパラメータ調整機能 • 実機上で、デバッグメニューからゲーム内の パラメータの編集できるようにした • ゲーム中でシステムが利用しているパラメータ インスタンスを直接編集する • 変更がゲームに即時反映される
リアルタイムなパラメータ更新機能の実装について public class Gimmick { [debug.menu.FloatRange(0.0f, 20.0f, 10.0f)] public float horizontal_power; [debug.menu.FloatRange(0.0f, 20.0f, 10.0f)] public float vertical_power; // … } var gimmick = new Gimmick(); debug.menu.SetInstance(gimmick);
リアルタイムなパラメータ更新機能の実装について [System.Flags] public enum AbilityType { Unknown = 0x00000000, ExternalVelocity = 0x00000001, ForceVelocity = 0x00000002, ForcePhysical = 0x00000004, // ... }; public class Ability { public AbilityType type; }; var ability = new Ability(); debug.menu.SetInstance(ability);
ステージエディタ
ステージエディタ • ステージはゲームの面白さそのもの • ステージエディタの作り込みに工数を割いた
動的な演出ツール(Animate State Machine)
演出のデータ化についての要件 • エフェクト、サウンドなどの演出を組み込みたい • ゲーム中にすでに配置されているキャラクターのモーションを再生したい • ゲーム中のカメラに対して、シームレスにカメラワークを行いたい
Animate State Machine(ASM) • 演出データ(Animation)で、ゲーム中のキャラクターやカメラなどを動的に 操作する仕組みを実装 • イベントキーを用いた、モデルのモーションやSE、エフェクトの再生 • 仮想オブジェクトに定義した動きを、ゲーム中のオブジェクトに適用 • 上記を確認できるプレビュー機能を実装
ASMによるゲーム開始演出 •下記の操作を演出データで行っている • カメラワーク • ゲーム内のキャラクターの登場モーション再生 • カットイン演出(START)
Unityのバージョンアップによるツールの改善 • Unityのバージョンアップに伴ってツール事情は改善されている • ASM → Timeline • Physics.autoSyncTransforms, Physics.autoSimulation, Physics.Simulate • ガイドラインの実装をUnityEngine.Physicsで行える? • http://tsubakit1.hateblo.jp/entry/2018/05/04/202040
まとめ
まとめ • コマンドパターンベースなゲームの実装を行った • アーキテクチャと、リプレイ・途中復帰との実装の相性が良かった • アーキテクチャごとの浮動小数点の扱いの差異とガイドライン実装の観点から、 物理演算を自前で実装した • 適切なツール作成を行うことで、企画から検証までのサイクルを回せるようにした
Thank you! ご静聴ありがとうございました!