私達が過去に制作していたマッチパズルゲームの改良バージョンをPazuTama2としてリリースしました。2018年7月2日Blogをいつもご覧いただきありがとうございます。先日「Myo」のジェスチャーでゲームを作ってみましたので今回はここでジェスチャーの使い方を紹介しようと思います。下記のURLはゲームの映像です。Myoアームバンドは、腕、手首、指のジェスチャーで、デバイスをワイヤレス操作することができます。下記のURLはMyoの公式サイトです。デフォルトで認識するプリセットジェスチャーは下記のとおりです。「グー」と「パー」を合わせて、モミモミすることができそうなので、私はこの二つのジェスチャーを利用して牛乳を搾るゲームを作りました。それでは、ジェスチャーの部分に入りましょう。SDKを持っていない人は上記のサイトからダウンロードできます。SDKをダウンロードして、Unityにインポートしましたが、エラーが三つ出ました。エラーが発生しているスクリプト(ColorBoxByPose)をチェックしたら、レンダリングの設定の書き方が古すぎますので、Unity2018.1.0f2(恐らくUnity2017以降のバージョン)では、書き方を変える必要がありますね。上記のように修正してエラーが消えるはずです。次はMyoをコントロールするために、SDKが用意してくれたプリハブをシーンに入れます。サンプルシーンの中で「Joint」というGameObjectがあります。このGameObjectに存在するスクリプト(JointOrientation)がMyoデバイスの方向を管理しています。これをプリハブにして、自分のシーンに適用します。方向を制御するスクリプトできたので、次はジェスチャー検出のコードですね。それでは、ジェスチャー検出用のスクリプトを作りましょう。そのオブジェクトに自分が作った「gManager」を入れて、ジェスチャー検出のコードを全部このスクリプト内に記述することにします。これで、SDKのプラグインの導入が完了しました。今回も引き続き、『物を掴む処理』を見ていきます。次回を含め、覚えることが盛りだくさんです。画像の中の青い部分は前回にやった『物に触れている間の処理』です。基本的にいつも通りの入力(トリガー)を拾う処理の為、割愛します。コントローラのトリガーを引いた際にオレンジの部分の処理が行われます。ここでは、触れている物の状態をチェックし、『持ち上げることができるか』を判定しています。最初に、変数『wand_is_touching』の値で『Branch』ノードを実行しています。Trigger』の処理で何かに触れている時にTrueに変更されています。『何かに触れているか』をチェックしています。Objects』ノードで比較しています。Objects』ノードは、A・Bに渡された値が同じであるかどうかを返します。Dynamic』ノードの結果がTrueであるかという処理を行っています。Dynamic』ノードは、『Actor』に指定された物体が動的であるかどうかを返します。『持ち上げようとしている物体が動かせるものか』という確認になります。ここまでの処理で、『物体を持ち上げるまでの確認』が完了しました。今回からは、前回の最後に登場した『function_pickup』ユニットのユニットフローを見ていきます。『function_pickup』ユニットには『物を持ち上げる』という処理が実装されています。function_pickupユニットを見ていきましょう。アセットブラウザから『vr_steam』->『models』->『functionality_pickup』の中にあるユニットを開きましょう。画像の赤四角のようなアイコンはユニットフロー単体を表しています。ユニットフローを編集するための『FlowEditor』が開かれます。ユニットエディタを開く必要がない場合はこちらを開いてもいいかもしれません。して開かれた『functionality_pickup』のユニットフローが以下の画像です。非常に膨大な処理ではありますが、少しずつ進めていきます。今回、説明していく箇所は、以下の画像で赤・青・緑の枠の部分です。ここでは一番最初に行うべき『変数の設定』を行っています。以下の変数がここで設定されています。Update』にて常に行うべき処理が実装されています。その結果を変数『wand_current_frame_pos』に設定しています。変数『wand_current_frame_pos』は現在位置を表しています。簡易的な物であれば建築分野用のVRデモなどを実装することもできます。今回は、VR特化のノードについて、用途ごとに以下にまとめてみることにします。StingrayにはOculus/GoogleVR/GearVR用のノードもあります。どのHMDでも内容はほぼSteamVRと同一の為、割愛します。Vive』テンプレートを選択しないと、下記のノードが使用できません。処理を分岐させています。ボタンの割り当てはViveの公式ドキュメントを参考にしてください。『Released』はボタンから指を離した時にそれぞれ呼ばれます。『Value』は入力の状態を0~1の範囲で返します。(指を離している時が0、完全に押し込んだ時が1。以下はトリガーの入力の範囲をログに出力するサンプルです。画像のようにノードを接続しています。Right』までをより詳細にしたノードです。タッチパッドから指を離したときに呼ばれる『Untouched』が追加されています。X/Yは指先が触れている座標を中央を0として1~-1の範囲で返します。ちなみに、どちらも『SteamVR』->『Input』の中にあります。『Seconds』秒間の振動を与えます。強制的に0.003999に合わせられてしまいます。画像のように連続で呼ばれるような処理を作る必要があります。2017年4月14日この記事は以下のような方を対象としています。先に前回・前々回の記事を読んでから、この記事を読み始めていただきたいです。こんにちは、名残惜しいですが『パンチングゲーム制作』は今回で一旦の最終回です。