再起動するようですブログを使って日々勉強するよ!この広告は、90日以上更新していないブログに表示しています。2014の2日目です。※その他の記事へはカレンダーのリンクからどうぞ。Calendarが2本立ってます、すげー。まっつん◆SW1/SWF8io(@n_mattun)です。直近では先月末のOculusGameJamにて友人の@faultierと「どうやら軍人らしい人が何らかの力により手から焔を出して全てを燃やし尽くす」ゲームを作ったりもしました。今回はそっちではなく別の拙作品、OculusRiftを駆使したロケットベルト体験ゲーム『飛べると!』*1で、PS3コントローラをどうやって設定をしたのかという部分を、ゲームのコンセプトも交えて具体的に解説していきます。ゲームの全体像をザっと確認したい方は、先に紹介動画をご覧ください。今回自分で定めたコンセプトは「空を自由に飛びまわる」でした。最初はアヌビスが超高速で飛ぶときに二の腕に仕込んでる(?)加速装置から出力を得て飛ぶようなイメージで、wiiリモコンプラス二刀流で翼を広げるような腕の動きと、手首のひねりで行きたい方向に進むというモノを考えたのですが、その操作方法だとアヌビスのような『鳥のように体を前に傾ける操作』をする必然性がないので、ちょっと体験ゲームとしての面白みに欠けます。体の傾きを操作方法に取り入れればいい↓じゃあモーションセンサーを物理的に背負わせてしまえばいい↓モーションセンサーを背負っても納得できるモチーフは何だろう?↓ロケットベルトだ!という思考順序でゲームデザインの基本方針が決定しました。アヌビスどこいったwまたここには「ユーザ自身が意識的に行きたい方向に体を動かして、そっちにVR上の画面もついてくる」という操作系の方がVR酔いがしにくいのではという読みも含んでいます、「運転者は助手席や後部差席に比べて車酔いしにくい理論」に沿う形ですね。続いて、wiiリモコンを背中に背負わせるというアプローチで調査も進めていたのですが、どうもPCやUnityでのwiiリモコンの制御方法に様々な方法論があり、またそれらの技術ブログを見る限りなんだか苦戦の匂いが漂っていたので、他の取得方法はないだろうか・・と思っていたところ、PS3コントローラに誰も見向きもしなかったSIXAXISというモーションセンサーがあったことを思い出しました。用途も前後と左右の傾きを取得する想定っぽかったので、かなりいいソリューションでした。C#環境)での導入実績になります(Win8はなんとかなるかもしれないけど、Macは無理じゃないかなぁ・・・)続いてはSIXAXISも検知してくれるPS3コントローラのドライバ探しです。ググってみるといちばん使われているのは「MotionJoy」というソフトで、ひとまずOculus+Unity側での実装は抜きでPC上でテストしてみるとBluetooth接続もサポートし、振動機能もサポートしてて、SIXAXISの傾き検知も対応している風でした。DS3』というソフトにたどり着きました。DS3http://betterds3.ciebiera.net/※注:ソフト単体だけでは動いてくれないので、以下の解説動画からDLLも合わせて入手しましょう。DS3内で使うDllファイル単体のダウンロードリンク付き)このソフトならUIもとても見やすく、Bluetooth、振動、SIXAXIS、キーコンフィグとすべて問題なく動いてくれました。ゲームパッドの入力形式は実は2通りあるコントローラ周りの情報を探しているうちに、実はゲームパッドの入力形式には『DirectInput形式』と『XInput形式』の2つの入力方法が存在することを知りました。Settings]-[Input]のインスペクタパネルから、入力ボタンと機能のマッピングができます。Xinput形式は、XBOXコントローラの入力に特化した形式で、Microsoftが提供する公式のドライバを導入することによって利用可能になります。Unity・・というよりもOculusでは、OVR/Scripts/Util内OVRGamepadController.csでこの入力を常時監視していて(SDKバージョン0.4.3.1の場合)、XBOXコントローラの入力が使えるPCの場合、OVRPlayerController.csの後半あたりでこのクラス経由で各キーの入力情報を見て、操作を割り当てています。「背中にエンジンの『振動』が伝わる」という機能も提供したい所です。この機能に関しては調べてる最中に面倒くさくなってやめようかなーという気になったのですが、PS3コントローラを入れたカメラバッグを背負って振動だけのテストをしてみたところものすごいロケットベルト感があったので「これは絶対に導入すべき!」と気が変わり、がんばって調べ込みました。振動機能自体はメジャーな技術なのでどうにかしてる人はいるだろうと探し回っていたのですが、少なくともPS3コントローラの振動機能をUnity上でそのまま使っている情報にはたどり着けませんでした。その代わり、XBOXコントローラ(XInput形式)を使った振動機能のライブラリ「XInputDotNet」を見つけました。GitHubそれと前述の通り、XInput形式の入力を受け取るにはドライバも必要になるので、合わせて以下のMicrosoft公式サイトからダウンロード+インストール。DS3はDirectInput形式、Xinput形式の入力切り替え機能までもサポートしていたので、これで全て整いました。DS3経由でPS3コントローラに入力信号を伝え、振動させる。DS3上のキーマッピング。ソフトを外に公開する際には普通にコントローラを持った形もサポートさせるために、もっと普通のキーマッピングにする予定です。PS3コントローラ以外で取得した、最後の1軸SIXAXISで取得できるのは「体の前後の傾き」と「体の左右の傾き」の合計2軸までしか取得できません。体の操作で2軸までコントロールしているので、「体の左右の回転」となるY軸もなんとかモーション的な操作方法で取得できないか・・・と思案した結果、こうなりました。25最終的に、手元で操作する本来のゲームコントローラは「wiiのヌンチャク*3のボタン1コだけ(ジェット噴射)」というものすごいエコな操作方法になりましたwこれなら将来的にゲームを拡張しよう!となった場合もキー割り当てに苦労しません。それこそ地球防衛軍4のウィングダイバーみたいに「飛び回りながら武器を切り替えて攻撃する」という操作も簡単にできるだろうし、なんならフェンサーの二刀流も組み合わせて、従来のFPSでは実現不可能だった『照準を二箇所にして左右別々に乱射しまくる』ということもやろうと思えば実現できるでしょう。Morpheusにフル対応してこの願いを叶えてください。やってくれたらPS4+モーフィアス+Move二刀流ですげぇ高くつくけど全部まとめて買うから!!斬撃のレギンレイヴの次回作もやりたいけどその次まで我慢するからさぁ!明日(12/03)は、@blkcatmanさんの「Unityから全球画像をつくるしくみ」と、@soyliquidさんの「OculusRift対応メタバース的なものをつくるかも」の予定です。*1:正式名称決めました。Touch初体験の雑感まとめ表題通りです。PSVRの予約開始日である06/18(土)に秋葉のベル...2015-12-29Oculus+FPS視点のカメラ左右操作時のVR酔い対策を思いついて試したらかなり良かった件VR酔い、なんとかしたいですよね。月別アーカイブ参加グループインターネットはてなブログをはじめよう!n_mattunさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。