前回に続き、SteamVRのチュートリアルを進めていきます。
使用するチュートリアルは以下の「Using Actions」のセクションからになります
https://www.raywenderlich.com/9189-htc-vive-tutorial-for-unity
Pose Action設定
チュートリアル通りに進めてると、右コントローラ、左コントローラのPose Actionを「SkeltonLeftHand(SkeltonRighthand)」に変更してください。と記述されています。
が、実際に操作してみると、ドロップダウンにSkelton~の選択肢が表示されず、選べるアクションはPoseのみとなっています。
今回のチュートリアルではコントローラの位置が取得できれば良いので、Poseアクションが設定されていることを確認するだけにとどめます。
下図のように、コントローラのPose Actionに「\action\input\default\in\Pose」が設定されていればOKです。

スクリプトの作成
定義したアクションを利用するためにスクリプトを記述します
「Asset > RW > Scripts」配下に「ActionTest」という名前でC#スクリプトを作成します。

作成した「ActionTest」スクリプトを開き、以下の修正を行っていきます
Start()メソッドは不要なので削除します。
ファイルの先頭にUsingを追加します
using Valve.VR;
以下の3つの変数を定義します。
public SteamVR_Input_Sources handType; // インプット状態を取得するコントローラ
public SteamVR_Action_Boolean teleportAction; // テレポートアクションへのリファレンス
public SteamVR_Action_Boolean grabAction; // グラッブアクションへのリファレンス
Updateメソッドの下に、以下のコードを追加します
public bool GetTeleportDown() // テレポートアクションが押された時の動き
{
return teleportAction.GetStateDown(handType);
}
public bool GetGrab() // グラッブアクションが押された時の動き
{
return grabAction.GetState(handType);
}
最後に、Updateメソッドの中に以下のコードを追加します
if (GetTeleportDown())
{
print("Teleport " + handType);
}
if (GetGrab())
{
print("Grab " + handType);
}
ここまでで、ActionTestの全体像は以下の通りになります
using UnityEngine;
using Valve.VR;
public class ActionTest : MonoBehaviour
{
public SteamVR_Input_Sources handType;
public SteamVR_Action_Boolean teleportAction;
public SteamVR_Action_Boolean grabAction;
// Update is called once per frame
void Update()
{
if (GetTeleportDown())
{
print("Teleport " + handType);
}
if (GetGrab())
{
print("Grab " + handType);
}
}
public bool GetTeleportDown()
{
return teleportAction.GetStateDown(handType);
}
public bool GetGrab()
{
return grabAction.GetState(handType);
}
}
コントローラへのスクリプト割り当て
作成したActionTestスクリプトをコントローラに割り当て、各種設定を行います。
・Controller (left)、Controller (Right)にActionTestスクリプトをアタッチ
・HandTypeに「Left Hand(またはRight Hand)を設定」
・Teleport Actionに「\action\input\default\in\Teleport」を設定
・Grab Actionに「\action\input\default\in\Grab」を設定
詳しくは以下の動画をご覧ください。

動作確認
以上の設定で、コントローラのボタン操作に応じて、コンソールにメッセージが表示されるようになります。
前回のコントローラバインドで、
・テレポートはタッチパッド上
・グラッブはトリガー
にボタンを設定していますので、上記のボタンを押せば、メッセージが表示されます。

コントローラの対応したボタンを押すと、メッセージが表示されるはずです。
今回は以上
今回はインプットの基礎部分を作成しました。
次回は、実際にVR空間のオブジェクトを掴む動作を作成したいと思います