simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

Unity: SteamVR 2.0 の入力処理の入門記事

前書き

こちらの記事の和訳だと思ってください
medium.com

VR コントローラの入力について、入門記事
アクションという概念を取り入れ、アクションを定義するところから始まります。

アクション単体では作れない

アクションを束ねた、アクションセットを作成するところから始まります。
最初はいくつものアクションが定義された default アクションセットが選択されている

default のほかに platformer, buggy, mixedreality のアクションセットが確認できる

アクションセットを作る

Window > Steam VR Input でダイアログを表示し
既存の default, platformer, buggy, misedreality のボタンの右側に + ボタンあるので押す

NewSet で作成、何か一つ In Actions に NewAction を追加 boolean Type とする

Save and generate ボタンを押し、完了を待つ

BooleanAction を参照してイベントハンドラを登録

using UnityEngine;
using Valve.VR;
public class MyActionScript : MonoBehaviour
{
    // a reference to the action
    public SteamVR_Action_Boolean sphereOnOff;
    // a reference to the hand
    public SteamVR_Input_Sources handType;
    //reference to the sphere
    public GameObject sphere;

    void Start()
    {
        this.sphereOnOff.AddOnStateDownListener(this.TriggerDown, handType);
        this.sphereOnOff.AddOnStateUpListener(this.TriggerUp, handType);
    }

    private void TriggerDown(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource)
    {
        Debug.Log("Trigger is down");
        this.sphere.GetComponent<MeshRenderer>().enabled = true;
    }

    private void TriggerUp(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource)
    {
        Debug.Log("Trigger is up");
        this.sphere.GetComponent<MeshRenderer>().enabled = false;
    }
}

ということ

f:id:simplestar_tech:20200217230014p:plain
エディタから参照!

Activate Action Set しないといけない

自分で作ったアクションセットはゲーム開始時にアクティブではない
アクティブになるように明示

f:id:simplestar_tech:20200217230122p:plain
なんでだよ

先ほどの MyActionScript より前に実行される位置にシーンに配置しないといけない制約もある

Open Binding UI

Window > Steam VR Input でダイアログを表示し、Open Binding UI ボタンを押す
newset という、さっき作ったアクションセットのタブが見える。
アクションが割り当たっていないことを示す表示かな

f:id:simplestar_tech:20200217230217p:plain
アクションが割り当たってないぞ

タブを選択して

f:id:simplestar_tech:20200217230554p:plain
トリガーボタンに boolean アクションを割り当て

はじめて動作することになる

まとめると、以下の一つが欠けると、何も反応ない結果になる

  • アクションセットを作る
  • アクションを作る
  • アクションハンドラを作る
  • アクションハンドラを登録するコードを書く
  • アクションを参照
  • 順番を守ったアクションアクティベート
  • 入力管理でアクションセットのアクションをコントローラのいずれかの操作にバインディング