まっつん◆SW1/SWF8io が再起動するようです

ブログを使って日々勉強するよ!

VR体験型ゲーム「飛べると!」の制作時の知見まとめ

この記事はOculus Rift Advent Calendar 2015 の9日目です。
(昨日 の記事は@hidex97さんによる「VRは健康!!!」でした)

Oculus・VR界隈で体験型ゲームを作ったり、たまにOcufesスタッフでも出没する@n_mattunです。今回は拙作の体感型VRゲーム「飛べると!」の初回リリースから現在までの変更点を書きながら、今まで得た知見を紹介していきます。
本記事が他のVRコンテンツ制作者へのヒントになれば幸いです。

 

そもそもどんなゲームなのか

背中に背負わせたジェットパックの出力方向を上半身の動きで制御して飛び回り、VR世界に浮いてる風船を制限時間内にたくさん割ろう!という、一人称視点の体感型ゲームです。
f:id:n_mattun:20151205203926p:plain

(この画像は出展時に使ってる説明書です)

Oculus DK2が出回りはじめて約1年半、VRコンテンツも数多く増えてきていますが、前後左右+上下の360度のVR空間を、ユーザの意思で自由に動き回らせるゲームとなると意外と数が少なくて、さらに体の動きをそのまま操作性に取り入れるコンテンツとなると、今のところ世界中見回しても本作だけだと思います。やった!世界初だ!!(自称)

操作方法

出力方向の検出

体の動きをエンジンの出力方向にマッピングするという操作系は当初から今までずっと変わっていませんが、軸の取得方法でマイナーチェンジがあったりしています。

  • ピッチ
    操作方法:体を前後に傾ける
    検出方法:背中に装着したジェットパック(PS3コントローラ)
         SIXAXISのピッチ回転を利用
  • ロール
    操作方法:体を左右に傾ける
    検出方法:SIXAXISのロール回転を利用
    OculusRift本体のロール回転の値を使うように変更しました。
     みんな背中より頭を動かすんだねw

  • ヨー
    操作方法:座ってる椅子で体ごと回る
    検出方法:椅子にマウスを付け、X方向の移動を利用
    →長時間運用でマウスが物理的に斜めにズれてくると値が変わるため、
     XだけではなくX方向とY方向の移動量のベクトルを使うように変更

    ※椅子の下にマウスはこんな感じでくっつけてます

    f:id:n_mattun:20151207023726j:plain

PS3SIXAXISの検知方法には、去年のAdventCarenderで紹介した「BetterDS3」を引き続き使っていますが、次のバージョンではPS4のコントローラに引越しをしようと思い、現在情報収集中です。

今のところ「DS4 windows input」がXInput形式でSIXAXIS、振動、タッチパッド、BlueTooth認識してくれ、SIXAXISの検出範囲の調整もでき、とても良さそうです。BlueToothドングルはCSR東芝のドライバだと動かないという罠があるので、注意しましょう。私はこれ使ってます↓

 

持たせたコントローラの変遷

主にエンジンの出力で使う、手に持たせるコントローラです。
ここはだいぶ試行錯誤してます・・・

複数のプレイスタイルに対応

初版ではPS3コントローラ背負い+手元にコントローラ+椅子にマウスという特殊環境のみでのプレイスタイルしか対応していませんでしたが、ソフト配布することも想定し、現在は従来のゲームコントローラでも遊べるよう、外部iniファイルから

PS3コン背負い+手元にマウス+椅子にマウス
PS3コン持ち+SIXAXISで出力方向調節
PS3コン持ち or XBOXコン持ち+アナログスティックで出力方向調節

など、いくつかのプレイスタイルを選べるようにしてあります。

 

出展時の立ち回り

実際にプレイしている様子を見るのは制作者にとって何よりも嬉しい瞬間なんですが、オペレーションを効率的にしてあげないとその様子を見る時間もなかなか確保できません。立ち回りは効率的にいきましょう。

説明書

本記事の冒頭に紹介した説明書です。最初は説明書は無く、苦労しながら現場で口頭で説明してましたが、ちゃんとマニュアル化しました。載せてる項目は

  • ゲームタイトル
  • 体験者のプレイの様子が一見でわかる写真
  • ゲーム画面のスクリーンショット
  • ゲームの簡単な説明文
  • ゲームの目的
  • 操作方法
  • OculusRIft自体の簡単な説明
  • 制作者名と連絡先

こんな感じです。この説明書をA4カラーで印刷してクリアファイルに入れ、体験待ちの人に渡しています。これを読んでもらうことにより口頭説明の時間が省略でき、かなりスムーズにブースが回るようになりました。
ちなみにけっこう忘れがちなのが「ゲームの目的(ゴール)」。これが明示されていないとユーザは「どうすればいいの?」と手が止まってしまうので、説明書なりゲーム内なりで終了条件をキチンと説明するか、ゲーム内で制限時間やゴール地点を設けるなりして、ユーザーが『終わりが明確にわかる』状態をちゃんと用意しておきましょう。

 

プレイ前の口頭説明時に気をつけていること

コントローラを渡す際は、まずマウスを見せ、使うのは1ボタンのみであることを説明し(この時点ではマウスは渡さない)、次にOculusをかぶせてVR世界を見渡してもらい、そのあとトリガーに指を通すように渡します。
ちなみに操作説明時は「Aボタンが●●、Yボタンが●●」と言われてもOculus装着後はそのボタンラベルが物理的に見えないので、「人差し指にあるボタン」という風に、指ベースに説明するのがコツです。

特殊装備

日本のVRコンテンツ制作者が大好きな特殊装備について。
飛べると!ではPS3コントローラを背負わすために使っている肩パッド+サスペンダーがそれにあたります。最初1セットのみでしたが、サイズもS・M・Lとバリエーションを持たせ、現在は予備含め5セット用意していて、オペレータが複数人いる時は体験待ちの人に先に装備してもらうというローテーションを組めるようにしてあります。
ただ装着の手間は相変わらずなので、小さいリュックとかにして装着の時間をさらに削減するのもアリかなぁと思ってたりしてます。

リアルタイム調整

ヨー軸の出力方向の検出で使っている「椅子マウス」について、激しい回転を連続で行うとマウスの位置がズれ、ヨーが高頻度で取得できなくなるというわりと致命的な問題があるのですが、ここは年明けの展示以降

『プレイ画面に表示されている矢印マークからヨー方向を常に監視し、椅子と矢印の向きがズれてきた場合は自分の手元にも持っているトラックボールマウスから直接調整する』

という、かなり強引な運用でカバーし続けています。

ここの解決方法については、椅子の側面かプレイヤーの腰付近にOculus Touchの片方をくっ付けてトラッキングさせるという資金力で殴る方向で考えてますが、他にもう少しコスパ的にも良いアイデアがあったら誰か教えてください・・w

 

ゲームバランス調整

出力エンジンの加速度

初回バージョンでは加速度はかなりピーキーで、行きたい方向に行くのはほぼ不可能でしたが、現在のバージョンでは地球防衛軍のペイルウィング/ウィングダイバーの経験、またはパイロットウィングスのロケットベルトの経験が豊富であればかなり自由に飛べるようになっています。

ちなみに後期のバージョンでは、落下時の火力を上昇時より強めに設定し、落下からのリカバリーをやりやすいようにしています。

風船の数と場所について

線路沿い、高速道路沿い、ビルの屋上、歩道橋の下など、なんとなく目指したくなるような所に置きつつ、空中にもランダムに散らして置いています。また風船の数は「数が多すぎてどこを目指したらいいかボやけてしまってる」という的確なレビューをいただいたことがあり、そこも適切な数になるよう自分なりに調整しています。

ちなみに開発時の風船の置き方については、Unityの3Dキャンバス上にいちいちドラッグで置いていくのは大変そうに見えたので、シーンプレビューで自分が飛びながら任意のボタンを押すと現在の座標を出力する状態を作り、その座標データを元に風船をスクリプトで配置していきました。

マップ

マップデータは「Japanese Otaku City」を利用しています。

マップの端っこにたどり着いた場合、どうやってごまかそうか・・という問題に対しての試行錯誤です。ちなみに一般的なゲームでもありがちな「空中に『見えない壁』があって、そこから先は『作戦外エリアです』とかもっともらしい理由を付けて行けないようにする」という解決策は、飛行時の爽快感を大きく損なうことと、見えない壁にあたってユーザの予測なしにいきなり慣性が変わると即VR酔いに繋がるので、ここは避けるべき問題と捉えていました。

  • 第一弾
    マップ端まできたら慣性を維持しながら反対側の画面端に演出付きでワープするようにしていた。

    →ユーザからすると画面端に到達してしまう焦りを伴った状態でいきなり別場所に飛ばされると意味がわからない状態になっていた。

  • 第二弾
    ワープ機能を無くして、街の端っこまで来たら地上に降りてもらい、反対側を向き直して飛びなおすように口頭で案内するようにした。
    →オペレーションが大変なうえに「ひたすら真っ直ぐ飛び続ける」ということができなくなり、ゲームとしての爽快感が失われた。

  •  第三弾

    体験しているユーザにはわからないように、マップを無限ループ化。
    方法は以下のとおり。

     ・同じ地図を3x3で9個配置
     ・地図上の線路と高速道路を、外側の地図と繋がってるように見せるために
      角度を微調整
     ・ゲーム上での飛行可能区域は中央の地図だけにし、
      中央地図の画面端まできたら、慣性を維持しながら
      中央地図の反対側の画面端にワープ。
      (ユーザーからすると画面上の変化は無い)

    →策としては成功したが、当然のように重くなり、オクルージョンカリングをかけてもOculus警察が見たら助走をつけて殴るレベルのバージョンになった。

     f:id:n_mattun:20151207014910j:plain
    (同じ地図を3x3配置してる様子。実際の飛行範囲は赤枠部分)

  • 第四弾
    現行のバージョン。ゲームのコンセプト的には秋葉原の街がちゃんと再現されてる必要は特にないので、許容できる程度のFPSがでるまで、建物の数をひたすら間引き。
    また風船も自分から離れている場合はアルファさせないなど、わかる範囲での軽量化を施す。

マップに対する手加えはいったんこれでFixしていますが、無限ループ実装でひたすら真っ直ぐ飛び続けられるものの、今度はそのせいでプレイヤーがほとんど旋回しない、やや単調なゲーム性になってしまっているので、次のバージョンでは飛行操作のひとつひとつを楽しむことに主眼を置いた、自作ベースのアスレティックなマップを提供しようかと思っています。

 

今後の予定(ひと段落したのでソフト配布も始めました)

今後ですが、OtakuCity上を飛び回るこのバージョンはこれでいったん開発終了にして、現在はUnity5.x環境下で大幅に作り変えた新バージョンをまたイチから作り直しています。新しいバージョンをOcufes等のイベント展示でお目にかけるにはまだまだ時間がかかりそうですが、どうぞ気長にお待ちください。

また、これでいったんひと段落したことだし、Oculus Runtime SDK 0.6.0.1以下でしか動きませんが、現状のバージョンのソフトを配布します。
こちらのアドレスからダウンロードしてください。

VR体感型ゲーム「飛べると!」 2015年版 - BowlRoll

 

コントローラ手持ち式でも普通に楽しめるかと思いますが、
がんばれば自宅でもPS3コンを背負ってワイヤレスのトラックボールマウスを用意した上で椅子にマウスを付けることも可能だと思いますので、面白そうだと思った方はぜひチャレンジしてみてくださいw 


明日のAdvent CarenderはOcuFesの縁の下の力持ち、@mkt_さんの「OculusRiftデモ展示Tips」です。