Jump to content

Unity3d HTC Vive Radial Menu - Weird Glitching


libra34567
 Share

Recommended Posts

So i wrote this radial Menu controlled by the trackpad on the left-hand wand. It determine which button to magnify by my fingers position on trackpad.

The Weird movement can be seen

.

Here i attacked my code related to this problem, the code for left wand.

 

SteamVR_TrackedObject obj; //The wandpublic GameObject buttonHolder;  //All the buttons will be children of this objectpublic bool buttonEnabled;void Awake() {    obj = GetComponent<SteamVR_TrackedObject>(); //this will be left hand controller}void Update() {    var device = SteamVR_Controller.Input((int)obj.index);    //if touchpad touched    if (device.GetTouch(SteamVR_Controller.ButtonMask.Touchpad))    {        if (buttonEnabled) //if radial menu is open        {            //touchPadAngle: Get the angle between touch coord and X-axis            Vector2 touchedCoord = device.GetAxis(EVRButtonId.k_EButton_Axis0); //what is this line each variable            float touchPadAngle = VectorAngle(new Vector2(1, 0), touchedCoord);  //(1, 0) is X-axis            // -------------------    Find closest button ------------------------            //Description: The process will be done by calculating the angle between button_Vector2 and X-axis (button_V2_to_10)            //            And then find the button with the closest angler difference with (touchPadAngle).             float minAngle = float.PositiveInfinity;            Transform minButton = transform; //Temperatry assign wand tranform to it.             float pad_N_button_Angle = 0.0f; //Angle between touchPadAngle and buttonAngle.             Vector2 button_V2_to_10;            float button_Angle;            foreach (Transform bt in buttonHolder.transform)            {                button_V2_to_10 = new Vector2(transform.position.x, transform.position.z) - new Vector2(bt.position.x, bt.position.z);                button_Angle = VectorAngle(new Vector2(1, 0), button_V2_to_10);                pad_N_button_Angle = Mathf.Abs(button_Angle - touchPadAngle);                //Both buttonAngle and touchPadAngle range from -180 to 180, avoid Abs(170 - (-170)) = 340                pad_N_button_Angle = (pad_N_button_Angle > 180) ? Mathf.Abs(pad_N_button_Angle - 360) : pad_N_button_Angle;                if (pad_N_button_Angle < minAngle)                {                    minButton = bt;                    minAngle = pad_N_button_Angle;                }            }            //Magnify the closest button            foreach (Transform bt in buttonHolder.transform)            {                GameObject btGO = bt.gameObject;                if (!btGO.GetComponentInChildren<ButtomHandler>().onHover && bt == minButton) {                    //Magnify                }                else if (bt != minButton && btGO.GetComponentInChildren<ButtomHandler>().onHover)                {                    //minify                }            }        }        else {            activateButtonMenu();        }    }

I'm quite stucked here, Any help would really be appreciated 

Link to comment
Share on other sites

  • 3 weeks later...
  • 1 year later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...