- Home /
How to access Vive controllers in a script attached on a simple game object(a cube)?
Hi all,
From an HTC Vive unity tutorial, I learnt the following way to access Vive controller from a script named ViveControllerInputTest and this script is attached to the Controller(left) and Controller(right) game objects. The snippet of code in ViveControllerInputTest is as shown below and I will explain my question after this snippet of code:
private SteamVR_TrackedObject trackedObj;
private SteamVR_Controller.Device Controller
{
get { return SteamVR_Controller.Input((int)trackedObj.index); }
}
void Awake()
{
trackedObj = GetComponent<SteamVR_TrackedObject>();
}
if (Controller.GetAxis() != Vector2.zero)
{
Debug.Log(gameObject.name + Controller.GetAxis());
}
if (Controller.GetHairTriggerDown())
{
Debug.Log(gameObject.name + " Trigger Press");
}
if (Controller.GetHairTriggerUp())
{
Debug.Log(gameObject.name + " Trigger Release");
}
if (Controller.GetPressDown(SteamVR_Controller.ButtonMask.Grip))
{
Debug.Log(gameObject.name + " Grip Press");
}
if (Controller.GetPressUp(SteamVR_Controller.ButtonMask.Grip))
{
Debug.Log(gameObject.name + " Grip Release");
}
The code above is quite straightforward and it works very well. My question is, for now, I want to access my Vive controllers in a script attached on another simple game object(a cube) INSTEAD of Controller(left) and Controller(right) game objects themselves. And I have written my own code shown below but it doesn't work as normal(no errors but no Debug.Log print out in the console either). Can you please help?
using System;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
namespace RosSharp.RosBridgeClient
{
public class TwistProvider : MessageProvider
{
GameObject viveObj;
private SteamVR_TrackedObject trackedObj;
private SteamVR_Controller.Device Controller
{
get { return SteamVR_Controller.Input((int)trackedObj.index); }
}
private float previousRealTime;
private GeometryTwist message;
private Vector3 previousPosition = Vector3.zero;
private Quaternion previousRotation = Quaternion.identity;
public override Type MessageType { get { return (typeof(GeometryTwist)); } }
void Awake()
{
viveObj = GameObject.FindGameObjectWithTag("controller");
trackedObj = viveObj.GetComponent<SteamVR_TrackedObject>();
}
public void FixedUpdate()
{
if (IsMessageRequested)
UpdateMessage();
if (Controller.GetAxis() != Vector2.zero)
{
Debug.Log(gameObject.name + Controller.GetAxis());
}
if (Controller.GetHairTriggerDown())
{
Debug.Log(gameObject.name + " Trigger Press");
}
if (Controller.GetHairTriggerUp())
{
Debug.Log(gameObject.name + " Trigger Release");
}
if (Controller.GetPressDown(SteamVR_Controller.ButtonMask.Grip))
{
Debug.Log(gameObject.name + " Grip Press");
}
if (Controller.GetPressUp(SteamVR_Controller.ButtonMask.Grip))
{
Debug.Log(gameObject.name + " Grip Release");
}
}
Your answer
Follow this Question
Related Questions
C# disable 2 diffirent scripts OnTriggerEnter 1 Answer
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Better way to get function from component on gameObject? 1 Answer
To count deaths with global variable 1 Answer
Is it possible to access a script in one duplicated game objets. 2 Answers