Smooth rotation on Y axis to target pose
Hello ! I'm currently trying to code a script for a point & click 3d game, where you have to resolve an enigma : You can freely rotate a sphere with OnMouseDrag, only on its Y axis. But when you don't drag anymore the object, it has to rotate till a certain pose, defined by my array "poses". I want it to go to the closest pose, with the rotSpeed, to be smooth.
I don't manage to make it work, and I found that a slerp could be the good solution, but i'm currently working with euler angles. I don't know how to do it ??
Here's my code :
 public int rotSpeed = 50;
     Vector3 initialPosition;
     Quaternion initialRotation; 
 
     public bool ondrag;
     Vector3 letsgo;
     float rot = 0;
     private float y;
     private int[] poses = { 0, 72, 144, 216, 288 };
 
     bool cond1 = false; 
     bool cond2 = false;
     bool cond3 = false;
     bool cond4 = false;
 
 
     void Start()
     {
 
         initialPosition = transform.position;
         initialRotation = transform.rotation;
         y = 0.0f;
         ondrag = false;
     }
 
     private void Update()
     {
             //for the enigma to be resolved    (later)
         if (cond1 && cond2  && cond3 && cond4)
         {
             
         }
         
     }
 
     void OnMouseDrag()
     {
         ondrag = true;
         rot = Input.GetAxis("Mouse X") * rotSpeed * Time.deltaTime;
         y += -rot * rotSpeed;
        
         if (y > 360.0f || y < -360.0f)
         {
             y = 0.0f;
         }
 
         transform.localRotation = Quaternion.Euler(0, y, 0);
         //Debug.Log("Angle :" + y);
     }
 
     private void OnMouseUp()
     {
         ondrag = false;
         print("Ondrag est false");
 
         for (int i = 0; i < poses.Length; i++)
             {
              float reste;
              if (y != poses[i])
               {
                   reste = y - poses[i];
                   print("y = " + y + "   Pose = " + poses[i]);
                   print("Reste :" + reste);
 
                  if (reste > -36.0f && reste < 36.0f)
                   {
                     letsgo = new Vector3(0, poses[i], 0);
                     //transform.Rotate(0.0f, poses[i], 0.0f, Space.Self)*rotSpeed ;
                     transform.rotation = Quaternion.Slerp(transform.rotation, letsgo, rotSpeed);
                 }
 
               }
             }
         }
  }
 
               Thanks for your time !
Your answer
 
             Follow this Question
Related Questions
Help with suns rotation 0 Answers
Instantiate object in orientation of previously instantiated object 1 Answer
UI compass pointing to a 3D object 0 Answers
copy rotation script doesent copy the full 360 degrees? 0 Answers
Mobile Gyroscope, make Camera always rotating towards zero point using Quaternion 2 Answers