Nuitrack 1.5.0
3D スケルトン トラッキング ミドルウェア
|
スケルトン トラッキングを使用した VR ゲームの作成を決めたが、何から始めたら良いかわからないということがあるかもしれません。その様な場合こそ、このチュートリアルで Nuitrack を使用した VRゲームの作成方法を学ぶことができます。VR ゲームでアバターのスケルトンに生気を与える方法を理解するには、「スケルトンを使用してアバターに生気を」のチュートリアルをご覧ください。
このチュートリアルでは、簡単な VR ゲームとして、ボクサーのアバターを使用し、ダミーをできるだけ強くパンチするゲームを作成します。パンチの最高速度が計測され、画面上部に表示されます。このゲームを作成するには、Nuitrack SDK、センサー (Nuitrack website のサポートしているセンサーの一覧にあるもの)、VR ヘッドセット (モバイル VR ヘッドセットまたは Gear VR ヘッドセット) が必要です。推奨される Unity のバージョン:2017.4 以上
完成済みプロジェクトは、 Nuitrack SDK: [Unity 3D] > [NuitrackSDK.unitypackage] > [チュートリアル] > [Box]
NuitrackSDK.unitypackage を Nuitrack SDK からインポートします。[Assets] > [Import package] > [Custom Package…]を選択します。作業に必要な以下のフォルダーにチェックを入れます。
VR ゲームの間、内側から見えないように、Unitychan プレハブの頭を隠すには、[Character1_Neck] > [変形] > [スケール] を (0; 0; 0) に設定します。
NuitrackAvatar 設定で、HeadParent を Element 16 にドラッグ アンド ドロップすることで、プレイヤーのアバターが頭を動かしてパンチをよけることができます。
新しいスクリプト、PunchSpeedMeter.cs を作成します。このスクリプトでは、ダミーが出現するタイミングとパンチ速度に関連するすべての設定を調整/指定します。スクリプトに、ダミーのフィールドを作成し、ターゲット (脊椎の関節で、階層の中で最初に動く関節、かつ体の他の関節の動きにも影響する関節) を変形します。
スタートアップ時に実行される Awake メソッドを作成します: キャリブレーション時に表示されないよう、ダミーの動作を停止します。
OnEnable メソッドを作成します。PoseCalibration スクリプトを使用して、onSuccess イベントを登録します。キャリブレーションが完了すると呼び出されます。
OnSuccessCalibration メソッドを作成し、求められている引数 (Quaternion rotation) を指定します。このメソッドでは、ダミーの最初の位置を指定します。ダミーは、キャリブレーション完了後に、プレイヤーから1m、エディターで設定したターゲットとなる関節から1m下の位置にスタンバイします (距離は自由に変更できます)。
OnSuccessCalibration イベントの登録解除を忘れずに行ってください。
スクリプトをダミーにドラッグ アンド ドロップします。Unity では、[ダミー]フィールドを[ダミー]に、[ターゲットの変形]フィールドを[Character1_Spine]に変更することで、ダミーがこの関節との関連で設定されます。
パンチングバッグ (サンドバッグ) ゲーム機で、パンチの力を計った経験はありますか?このプロジェクトでは、記録更新に何度でも挑戦できます。パンチの最高速度がダミーの頭の上に表示され、記録が更新される度に 数字は更新されます。PunchSpeedMeter.cs スクリプトに、UI 名前空間を追加します。これは、パンチの速度に関するテキスト情報を表示するために必要です。Text フィールドも作成します。
PunchSpeedMeter クラスに、パンチの最高速度に関する情報を保存するための maximumPunchSpeed 変数を追加します。
CalculateMaxPunchSpeed メソッド (パンチ速度の処理を行う) を作成します。新しい速度が、現在の最高速度よりも早い場合にのみ、カウンターが更新されます。
新しいスクリプトPunchSpeedSender.cs を作成します。ダミーの体の数か所 (TorsoBone と NeckBone) をパンチする可能性があるので、パンチを受け止めてくれるセコンドが必要です。これらの部位をパンチした場合、PunchSpeedSender はその情報をPunchSpeedMeter に送ります。このスクリプトでは、 PunchSpeedMeter に言及し、OnCollisionEnter メソッドを作成します。2つのオブジェクトが衝突する場合、相対的なパンチ速度が提示されます。
Unity の設定で、このスクリプトをTorsoBone と NeckBone にドラッグ アンド ドロップします。[パンチ速度メーター]フィールドで、 PunchSpeedMeter を指定します。
Unity で、プレイヤーのアバター用ボクシング グローブとなる 2つのオブジェクトを作成します。作成には、[作成] > [空のオブジェクト] > [左のグローブ]と[右のグローブ]のコマンドを使用します。実際は、素手でダミーをパンチしますが、仮想のボクシング グローブを付けることで、パンチ速度を測定できるようになります。必要な構成要素を追加するには、[要素の追加]を使用します。[カプセル コライダー]、[RigidBody]を調整することで、衝突を正しく扱うことができます。腕の動きに合わせてグローブがどの方向に動くか設定するには、[カプセル コライダー] > [方向] > [X軸] のコマンドを使用します。グローブの位置とサイズを指定します。[高さ]を 0.2 (最適値)、[直径]を 0.05 に設定します。グローブを表示させたい場合は、プレハブを作成し、上記の設定を適用します。
スクリプト RigidbodyFollower.cs を作成し、グローブの動作を指定します。target フィールドを作成し、グローブが追いかけるターゲット オブジェクト (ここでは、プレーヤーを示すアバターの手) を指定します。さらに、rigidbody フィールドを作成します。
ゲーム開始時に、カプセルに関連付けられている Rigidbody へのレファレンスを受け取ることになります。
FixedUpdate メソッドを作成します。このメソッドでは、カプセルの動作を指定します。ターゲットの変形に応じて、位置や回転が変わります。このプロジェクトで、transform.position dehanaku MovePosition を使用しているのは、アバターのグローブが RigidBody Physics を使用して動くはずだからです。簡単な位置の変更が間違って処理されることがあるのは、変形が物理法則を無視して転送されるからです。
スクリプトを左右のグローブにドラッグ アンド ドロップし、[ターゲット]を指定します(Character1_LeftHand, Character1_RightHand)。
プロジェクトを実行し、ダミーをパンチします。表示されるパンチ速度を確認します (ダミーの頭の上に表示)。記録更新に挑戦してください!
おめでとうございます!スケルトン トラッキングを使った VR ボクシング ゲームの完成です!