HTC VIVE開発ノート(一)SteamVRプラグインを用いた基本的なインタラクション
2791 ワード
1、取手の引用:現在、左右の取手を区別していない
あとはこのindexを判断することでどのハンドルなのか判断できるでしょう.SteamVRでは追跡可能な全ての機器をこのTrackedObjectクラスに保存し、GetComponentメソッドで現在追跡されている物体を取得し、ハンドルへの入力を取得することができる(Updateメソッドで行うことで、常に更新することができる.そうでなければStartメソッドで取得した入力であれば、最初に保存したdeviceだけが物体と対話できる).その後の操作はすべてこのデバイスに基づいて行われました.
2、touch padの座標を取得する
3、Triggerが押されていないか、または緩められていないかを監視する
ButtonMaskここでもキーボードのような判断を行い、ハンドル上の異なるボタンの名前に変更して、対応する判断や処理を行うことができます.
4、ハンドルでCubeを掴み、緩める流れ
まず、ハンドルとつかむ物体にColliderを追加します.ハンドルのColliderのisTriggerをチェックすると、実はハンドルは衝突体ではなく、虚のようなもので、トリガイベントを監視する物体としてしか感じられません.
とても愚かな問題に出会って、どのようにColliderの大きさを調整して、Sceneの下でハンドルの模型が見えないため、私はこのようにして、playを始めて、それからハンドルを見てからゲームを一時停止して、Sceneモードに戻って、ハンドルの大きさによってColliderを調整して、パラメータを記録します.そしてゲームをやめて、パラメータを変更しました.みそにする.
次に、使用した関数を見てみましょう.
衝突体otherが現在のTriggerに入ると,このEnterメソッドが呼び出される.ここではこのcolliderのtransform.gameObjectを保存します.
TODO:Collider.transform.gameObjectとCollider.gameObjectの違いを明らかにします.なぜother.gameObjectを直接保存できないのですか.
衝突体がTriggerを離れると(OnTriggerExit)、interatBoxをクリアします.
把持操作を行い、把持した物体をハンドルの下に縛り、ハンドルの変化に伴って変化させる.このcolliderノードを親ノード(ハンドル)の下に縛ることです.
に合格
今日の勉強を通して、UnityとHtc viveの開発に少し慣れました.
private SteamVR_TrackedObject trackedobj;
private SteamVR_Controller.Device device;
trackedobj = GetComponent();
device = SteamVR_Controller.Input((int)trackedobj.index);
あとはこのindexを判断することでどのハンドルなのか判断できるでしょう.SteamVRでは追跡可能な全ての機器をこのTrackedObjectクラスに保存し、GetComponentメソッドで現在追跡されている物体を取得し、ハンドルへの入力を取得することができる(Updateメソッドで行うことで、常に更新することができる.そうでなければStartメソッドで取得した入力であれば、最初に保存したdeviceだけが物体と対話できる).その後の操作はすべてこのデバイスに基づいて行われました.
2、touch padの座標を取得する
device.GetAxis().x
device.GetAxis().y
3、Triggerが押されていないか、または緩められていないかを監視する
if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
GetPressDownメソッドは、ブール値を返します.ButtonMaskここでもキーボードのような判断を行い、ハンドル上の異なるボタンの名前に変更して、対応する判断や処理を行うことができます.
4、ハンドルでCubeを掴み、緩める流れ
まず、ハンドルとつかむ物体にColliderを追加します.ハンドルのColliderのisTriggerをチェックすると、実はハンドルは衝突体ではなく、虚のようなもので、トリガイベントを監視する物体としてしか感じられません.
とても愚かな問題に出会って、どのようにColliderの大きさを調整して、Sceneの下でハンドルの模型が見えないため、私はこのようにして、playを始めて、それからハンドルを見てからゲームを一時停止して、Sceneモードに戻って、ハンドルの大きさによってColliderを調整して、パラメータを記録します.そしてゲームをやめて、パラメータを変更しました.みそにする.
次に、使用した関数を見てみましょう.
private void OnTriggerEnter(Collider other)
衝突体otherが現在のTriggerに入ると,このEnterメソッドが呼び出される.ここではこのcolliderのtransform.gameObjectを保存します.
interactBox = other.transform.gameObject;
TODO:Collider.transform.gameObjectとCollider.gameObjectの違いを明らかにします.なぜother.gameObjectを直接保存できないのですか.
衝突体がTriggerを離れると(OnTriggerExit)、interatBoxをクリアします.
把持操作を行い、把持した物体をハンドルの下に縛り、ハンドルの変化に伴って変化させる.このcolliderノードを親ノード(ハンドル)の下に縛ることです.
// trigger
if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
{
Debug.Log("Trigger down");
if (interactBox != null)
{
interactBox.transform.parent = transform;
Rigidbody rig = interactBox.GetComponent();
rig.useGravity = false;
rig.isKinematic = true;
}
}
// trigger
if (device.GetPressUp(SteamVR_Controller.ButtonMask.Trigger))
{
Debug.Log("Trigger up");
interactBox.transform.parent = null;
Rigidbody rig = interactBox.GetComponent();
rig.useGravity = true;
rig.isKinematic = false;
}
Unity初心者なので、最初はよく分かりませんでしたが、ここのtransformはなぜハンドルのtransformなのか.このスクリプトはハンドルの下に縛られているので、クラスに相当するでしょう.transformはその中のメンバーの一人なので、直接アクセスできます.に合格
interactBox.transform.parent = transform;
は、衝突した物体の変換行列を親ノードの変換行列の下に縛る.次に、リジッドボディのパラメータを変更します.今日の勉強を通して、UnityとHtc viveの開発に少し慣れました.