Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20時間超の物語をVRで!『ALTDEUS: Beyond Chronos』の制作を支えた”U...

20時間超の物語をVRで!『ALTDEUS: Beyond Chronos』の制作を支えた”Uranus”の制作過程と機能紹介 [CEDEC2021] / Introduction of ALTDEUS' VR ADV tool "Uranus", CEDEC2021

2021/08/25、CEDEC2021にて行われた発表の講演資料です。
動画を含むスライド等に一部注釈を加えています。

20時間超の物語をVRで!『ALTDEUS: Beyond Chronos』の制作を支えた”Uranus”の制作過程と機能紹介
https://cedec.cesa.or.jp/2021/session/detail/s6058637b527da

Nakaji Kohki

August 25, 2021
Tweet

More Decks by Nakaji Kohki

Other Decks in Technology

Transcript

  1. VRインタラクティブストーリーアクション • 「VRゲームならではのインタラクションと物語 体験」を両立した作品 • 2020年12月リリース • Oculus / Steam

    / PSVRで発売中 🏅ファミ通・電撃ゲームアワード2020   アドベンチャー部門 最優秀賞 🏅Oculusストア内ユーザー評価 世界No.1    (Road to VR調べ) ALTDEUS: Beyond Chronos(アルトデウスBC)
 W IP
  2. 登壇者について - 中地 功貴
 W IP W IP VRエンジニア 中地

    功貴 / Nakaji Kohki 上級バーチャルリアリティ技術者 (日本VR学会認定) 著書: 技術評論社『VRエンジニア養成読本』共著 作品: 『Crevasse』『至近距離ガールVR』 2020年1月にMyDearestへ入社し、 『アルトデウス:BC』のインタラクション の実装全般とCI整備を担当 Twitter: @nkjzm
  3. 登壇者について - 下嶋 健司
 W IP W IP リードボードゲーマー 下嶋

    健司 / Shimojima Kenji 2018年4月にMyDearestに入社し、 『東京クロノス』『アルトデウス:BC』 のリードプログラマー的な何かを務める。 個人製作も昔から継続してたりしてなかったり。 作品:『アニュビスの仮面』『ウルタールの化け猫』 『ジュン少年の事件簿』等 Twitter: @ookumaneko_XD
  4. 登壇者について - 増谷 海人
 W IP W IP 放浪エンジニア 増谷

    海人 / Masutani Kaito 2018年にMyDearestへ入社し、 『東京クロノス』『アルトデウス:BC』 のプログラマーとして活躍。 幼少期からプログラミングに興味を持ち、 個人でのゲーム制作を日々続けている。 Twitter: @(休止中)
  5. • Unityのエディター拡張で制作
 • Unityで完結するのは良い
 • 3Dの敷居が高い
 – 初心者の手は借りられない
 Unityアセット
 Fungus


    https://assetstore.unity.com/packages/tools/game-toolkits/fungus-3418 4
 宴
 https://assetstore.unity.com/packages/tools/game-toolkits/utage3-unit y-text-adventure-game-engine-version3-80727

  6. • GAS(Google App Script)
 で変換
 • 変換先はシナリオと
 イベントのベースになる
 「字コンテ」ファイル
 •

    書式ルールは大体
 クロノス準拠
 
 シナリオのGoogleSpreadSheet(GSS)化
 GoogleDocument (シナリオ) GoogleSpreadsheet (字コンテ)
  7. メインルーチンの実装
 ゲームスタート
 ↓★↓
 演出データロード & ロード待機
 ↓
 必要なアセットをロード & ロード待機


    ↓
 演出実行 & 終わるまで待機 
 ↓
 演出後処理、次の演出データを決定 
 ↓
 ★に戻る…

  8. メインルーチン (前作の場合)
 • Update ()
 ◦ もし演出ロード中なら
 ▪ 演出ロード完了をチェック
 ▪

    ロード画面処理
 ◦ そうでないなら
 ▪ もしコマンドが処理待ちフラグがONなら
 – コマンドの処理待ち
 ▪ そうでないなら、以下ループ
 – 次のコマンドを実行する
 – もしそのコマンドが処理待ちを要求したら
 » コマンド処理待ちフラグをON、ループ終了
 – もし次のコマンドがなかったら (演出終わり)
 » 演出をロード、ループ終了
 処理順? どこから始まる??
  9. ALTDEUS でのメインルーチン
 • async / await ベースの非同期処理
 ◦ await 処理関数

    = 処理が終わるのを待つ
 ◦ UniTask を採用
 ▪ Unity 上で async/await ベースの記述を
 可能にするライブラリ
 ▪ Coroutine と似た記述が可能で、より高機能

  10. メインルーチンの実装
 • async メインルーチン
 ◦ while (次の演出がある)
 ▪ await 演出データロード


    ▪ await 必要なアセットロード
 ▪ 演出結果 = await 演出実行
 – await コマンド演出処理
 – return 演出結果
 ▪ 演出結果に応じて次の演出を決定

  11. メインルーチンの実装
 ゲームスタート
 ↓
 演出データロード
 ↓
 アセットロード
 ↓
 演出実行
 ↓
 次の演出データロード


    ↓
 …
 ←これと同じ順番で処理を記述できた
 
 • 見やすい
 • コードメンテナンスしやすい
 • await 中は他の処理を並列で実行で きる

  12. • コマンドが行う処理
 ◦ 演出ロード時
 ▪ ロード処理
 – 演出に必要なアセットなどを登録
 ◦ 演出中


    ▪ 演出処理
 – コマンドを非同期で実行
 ▪ ルーチン処理
 – 単純な順番以外で実行する場合の処理
 コマンドの実装

  13. 演出中のコマンド処理
 • while (次のコマンドがある)
 ◦ await コマンドの演出処理
 ◦ IF
 ▪

    コマンドが単純な遷移 -> 一つ下のコマンドへ
 ▪ 複雑な遷移 -> コマンドのルーチン処理

  14. • 選択肢コマンド
 ◦ 演出処理
 ▪ await 画面を表示、アニメーション待機
 ▪ 選択肢を選択可能にする
 ▪

    await 選択肢が決定されるのを待機
 ◦ ルーチン処理
 ▪ 選択結果に対応するラベルへジャンプ
 コマンド実装の一例

  15. 東京クロノスの時の問題点
 設定の切り替えを各プログラマのローカル環境で行っていた • 前回うまくいったビルド設定が分からなくなる ◦ 様々なビルド設定が存在した(Defineの切り替えも併用) ▪ Oculus Go (Android)

    ▪ Oculus Quest (Android) ▪ Oculus Rift (PC) ▪ Steam (PC) ▪ PlayStation VR (PS4) • ローカルの意図しない変更がビルドに含まれてしまう • デバッグのたびに手動で端末にインストールする必要がある
  16. 自動ビルド
 アルトデウス:BCでは自動ビルドの仕組みを導入! • GitHubにpushするとJenkinsのジョブ(処理の単位)が動く ◦ ジョブが動くと自動的にビルドとテストが実行 ▪ プラットフォーム毎 ▪ 設定毎(debud/

    staging / release) • ビルド失敗→ ビルドログをSlackに通知 • ビルド成功→ NASと各プラットフォームにアップロード ➡ Pushした数分後にVRHMD実機で動作確認が可能に!
  17. Jenkinsの流れ
 • 定期的にPollingして実行 • CLIでUnityのメソッドを呼べる ◦ ビルドとテストを実行 ◦ • 結果に応じて後続ジョブが実行

    • Slackに通知する(右図) push通知 ビルド結果通知 (Rift/Dev) アップ完了通知 ビルド結果通知 (Quest/Dev) アップ完了通知
  18. 自動プレイ • バッチでNAS上にある最新ビルドを定期的に自動起動 ◦ 3倍速で自動進行してクリアまで進めてくれる • プレイログ/クリアログをSlackに通知 • プレイの様子をOBSでストリーミング配信 ◦

    配信サービスの規約的にOKであるか確証がないので念のため伏せる ◦ Slackで「配信くれ」というとURL教えてくれる ~6:30 ➡ 常に進行不能等の不具合が、自動的に早期に検知できる ⬅Oculus Rift 自動プレイの様子 常に最新ビルドの 自動通しプレイが走っている
  19. 会話進行 - 強制入力
 VRInput Uranus Input DebugInput 入力来たら通知飛ばす 
 Uranus上の入力


    デバッグの入力
 強制入力
 入力来たら通知飛ばす 
 入力に反応
  20. 位置回転入力の更新
 手と頭の反映 自動で現在の 手と頭の位置指 定 HMDとコント ローラーの 更新適用 ハード毎の入力
 実際に見える要素


    自動進行
 手と頭の反映 HMDとコント ローラーの 更新適用 ハード毎の入力
 実際に見える要素
 通常