How to get controller input when using the SteamVR Interaction System

I want to just simply get controller input from the user in my VR game, and i also want to use the SteamVR interaction system so that I can have easy UI stuff be implemented. However, I cannot get input from the controller off of the Hand script.

All that I did was drag in the “Player” prefab, and then write a script to go on the Hand object to get input from the triggers.

    private Hand _hand;                     // The hand object
	private SteamVR_Controller.Device controller; // the controller property of the hand


    void Start ()
    {
        // Get the hand componenet
        _hand = GetComponent<Hand>();
        // Set the controller reference
	    controller = _hand.controller;
    }
	
    void Update ()
    {
            // === NULL REFERENCE === //
		if ( controller.GetHairTrigger())
		{
			Debug.Log ("Trigger");
		}

    }

This gives me a null ref exception to the “controller” object. I have also tried getting the controller component in OnEnable() and Awake() and that didn’t work either. Even in Update(). So for some reason the Hand class of SteamVR does not hold a reference to the controller. Am I doing something wrong?Am I missing some sort of index specification when i get the controller?

I am able to get controller input like this:

   private SteamVR_TrackedObject trackedObj;       // The tracked object that is the controller

    private SteamVR_Controller.Device Controller    // The device property that is the controller, so that we can tell what index we are on
    {
        get { return SteamVR_Controller.Input((int)trackedObj.index); }
    }

    private void Awake()
    {
        // Get the tracked object componenet
        trackedObj = GetComponent<SteamVR_TrackedObject>();
    }

    void Update()
 {
     if(Controller.GetHairTrigger()){
          Debug.Log("hey trigger");
     }
  }

But then I cannot use the Interaction system. Anyone have a clue?

I’m sure you solved this by now, But… for anyone else that stumbles across having this issue:

You need to add the library for the interaction system to your code.

using Valve.VR.InteractionSystem;

This sets up references to their classes for your code

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using System.Collections.ObjectModel;

using Valve.VR.InteractionSystem;

public class SAHandInput : MonoBehaviour {

    private Hand hand;                     // The hand object


    void Start()
    {
        // Get the hand componenet
        hand = GetComponent<Hand>();     

    }

    void Update()
    {
        // === NULL REFERENCE === //
        if (hand.controller.GetHairTriggerDown())
        {
            Debug.Log("Trigger");
        }

    }
}

This works. I don’t know why.