【Unity/Playmaker】VR空間でアーチェリーを作って操作する

みなさんこんにちは!今回の記事ではVRコントローラーを使って、弓矢を操作可能にする手順について説明します。

コントローラー設定については以前の記事で詳しく書かれているので、まだ読まれていない方は先にそちらをお読みください。

また、STYLY x Playmakerチュートリアルシリーズも先に読んでいただくことをおすすめします。

今回の記事の主な目的は、オブジェクトへ動力や弾性を設定する方法の基礎について解説することです。

VR内の2つのコントローラー間の距離を取得し、定数との積を利用します。 私がサンプルとして作成した、Unity x Playmaker x STYLYを利用したアーチェリーシーンをこちらから体験することができます。

まず、3dwarehouse.sketchup.comからフリーの弓矢のモデルをダウンロードします。

モデルをprefab化することと、空のゲームオブジェクトの子供として設定することを忘れずに。

これは、モデルは時として非常に扱うのが難しく、ゲームオブジェクトを親として設定する方がおすすめだからです。

これでprefabの用意が完了したので、STYLYへアップロードするprefabの準備をします。

セットアップの手順に関しては、こちらのチュートリアルを参考にしてください。

ひとつめのコントローラーのセットアップが完了したら、そのオブジェクトを複製し、名前を変更してください。

オブジェクトの名前だけではなく、内部のイベントで参照されるいくつかの項目(例:Global_TriggerDown_RをGlobal_TriggerDown_Lへ変更)も変更する必要があります。

手順や操作に不明点がある方は、こちらのチュートリアルもお読みください。 双方のコントローラーのセットアップ完了後、VRでモデルの表示場所を確認しながら、リアリティを感じられる場所へ設定してください。

設定完了後、矢として使用する右側のコントローラーの詳細設定をはじめましょう。

ステート1は空です。ステート2で、オブジェクトを生成します。トランジションによって、同時に複数の矢が生成されないように設定します。 では、面白い設定箇所にすすみましょう。

弓矢の発射時、プレーヤーの姿勢について考えます。腕を伸ばし、いわゆるアーチェリーの姿勢のように、弦を引いた状態で矢が勢いよく飛ぶように。

逆に腕が伸ばされておらず、弦がうまく引かれていない状態では矢の勢いが落ちるように設定を行っていきます。ここでキーとなるのはコントローラー間の距離です。次のアクションを使用します。

  • Find Game object (Controller (left)を取得し、Controller_Lへ保存 )
  • Find Game object (Controller (right)を取得し、Controller_Rへ保存)
  • Get distance (ゲームオブジェクトcontroller_Lとターゲットcontroller_Rの距離を取得し、forceMultiplyerへ保存)

これで距離が取得できたので、距離に定数を掛け、矢へ設定する力を算出します。

このために、Float multiplyアクションを使用します。サンプルでは、forceMultiplyerへ5000を掛けました。それを矢のZ軸へ設定し、SpaceをSelfへ設定します。

最後に、Set Float Valueアクションを使用してforceMultiplyerを0へリセットします。これでシンプルな弓と矢の設定が完了しました。

この時点ではまだ問題も残っており、例えば矢が弓に向いていなくとも矢は飛んでいってしまいます。これは、常に矢が弓の方を向くようLook atアクションを設定することで回避できます。

おめでとうございます!これであなたもアーチェーリーの練習を始めることができるようになりました。

 

ビデオチュートリアルをURDU またはHINDIでみたい方は、  https://www.youtube.com/watch?time_continue=13&v=HffXmcMba-o こちらをクリックしてください。