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