- Home /
 
 
               Question by 
               xfixtrion4 · Aug 10, 2019 at 07:07 AM · 
                vrcontrollerbike  
              
 
              Smooth turn (bike controller + yocto)
Hi everyone !
I have an issue in my vr simulator. I use a yoctoPuce to get impulse from my bike (real). When i go forward it works pretty well but the rotation is jerky. If anyone have a solution this will be wondeful ! This is my Script:
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
 
 public class BikeControler : MonoBehaviour
 {
     public bool isReplay;
     public int minAngle;
     public int maxAngle;
     public float magnitude;
     public bool alreadyTurn;
     public float coef;
     private Data data;
 
     #region bike component
     public GameObject bikeFrame;
     public GameObject frontWheel;
     public GameObject backWheel;
     public GameObject player;
     public GameObject bike;
     public float speed;
     public float turnSpeed;
     public GameObject wheel;
     public GameObject point;
     private float coefRotation = 1.2f / Mathf.Cos(21.257f);
     public Rigidbody rigid;
     public ReplayManager replayManager;
     public GameObject cadretest;
     #endregion
 
     #region Yocto component
     string errmsg = "";
     string target;
     YAnButton input1;
     YAnButton input2;
     YAnButton input3;
     YAnButton input4;
     YAnButton input5;
     private long nbOfPulse;
     private long lastNbOfPulse;
     private int sens;
     private float speedy;
     #endregion
 
     private void Start()
     {
         data = GameObject.FindGameObjectWithTag("Data").GetComponent<Data>();
 
         //initialize my yoctoPuce 
         if (YAPI.RegisterHub("usb", ref errmsg) != YAPI.SUCCESS)
         {
             Debug.Log("RegisterHub error: " + errmsg);
             Environment.Exit(0);
         }
         input1 = YAnButton.FirstAnButton();
         if (input1 == null)
         {
             Debug.Log("No module connected (check USB cable) ");
             Environment.Exit(0);
         }
 
         target = input1.get_module().get_serialNumber();
 
         input1 = YAnButton.FindAnButton(target + ".anButton1");
         input2 = YAnButton.FindAnButton(target + ".anButton2");
         input3 = YAnButton.FindAnButton(target + ".anButton3");
         input4 = YAnButton.FindAnButton(target + ".anButton4");
         input5 = YAnButton.FindAnButton(target + ".anButton5");
         nbOfPulse = input5.get_pulseCounter();
         lastNbOfPulse = input5.get_pulseCounter();
 
     }
 
     void Update()
     {
 
         if (!isReplay)
         {
             //Get pulse of the yocto from the bike
             nbOfPulse = input5.get_pulseCounter();
 
             //Difference between the last pulse counter and now
             long pulseDif = nbOfPulse - lastNbOfPulse;
             lastNbOfPulse = nbOfPulse;
 
             // Rotation value from the yoctopuce of the bike
             float frameRotation = input2.get_calibratedValue();
             float angle;
 
             // Slowdown if the player stop pedaling
             if (pulseDif == 0)
             {
                 //Speed change with weather
                 if (speedy > 0)
                     if (data.weatherData == 2)
                         speedy = speedy - 0.05f;
                     else if (data.weatherData == 3)
                         speedy = speedy - 0.01f;
                     else
                         speedy = speedy - 0.2f;
             }
             else // Speed from impulse
             {
                 speedy = pulseDif;
             }
 
             // The rotation of the bike frame
             bikeFrame.transform.localEulerAngles = new Vector3(-21.257f, 0, (500 - frameRotation) / 10);
 
             //Here is my issue-> rotation
             if (frameRotation < minAngle || frameRotation > maxAngle)
             {
                 if (frameRotation > 500)
                 {
                     angle = (360 - bikeFrame.transform.localEulerAngles.z);
                     sens = -1;
                 }
                 else
                 {
                     angle = -bikeFrame.transform.localEulerAngles.z;
                     sens = 1;
                 }
 
                 //here 
                 angle = Mathf.Deg2Rad * angle;
 
                 float centerCircle = coefRotation * (1 / angle);
 
                 point.transform.localPosition = new Vector3(centerCircle, 0, 0);
 
                 bike.transform.RotateAround(point.transform.position, Vector3.up, sens * (speedy) * turnSpeed);
 
                 alreadyTurn = true;
             }// Forward move 
             else
             {
                 if (rigid.velocity.magnitude < magnitude)
                 {
                     if (alreadyTurn)
                     {
                         rigid.AddForce(transform.forward * (speedy) * turnSpeed * coef);
                         alreadyTurn = false;
                     }
                     else
                         rigid.AddForce(speed * (speedy) * 10 * cadretest.transform.forward, ForceMode.Acceleration);
                 }
             }
         }
     }
 }
 
              
               Comment
              
 
               
              Your answer
 
             Follow this Question
Related Questions
SteamVR 2.3 - Vive controllers aren't tracking after scene load 1 Answer
Gear VR controller buttons not working in Unity 2018.2 LW VR template 0 Answers
OVR Controller ghost flyer 0 Answers
how to save the values of hmd and controller position rotation in a list 0 Answers
How to map input for new Samsung Gear VR controller? 3 Answers