- Home /
Rotate Turret back to match base
Hi,
I have a model of a Mech that as the player gets within its range it stops and the top half rotates around and down to track the player then opens fire if the player gets any closer, here is the code I use to track the player -
// Rotate to face the Player
var lookPos = player.position - mechTurret.position;
var rotation = Quaternion.LookRotation(lookPos);
rotation *= Quaternion.FromToRotation(Vector3.up, Vector3.right);
// Use this line to add X,Y,Z degrees to line up the mechTurret with player when attacking if needed
rotation *= Quaternion.Euler(XattackDegrees, YattackDegrees, 0);
mechTurret.rotation = Quaternion.Slerp(mechTurret.rotation, rotation, Time.deltaTime * turnToLookSpeed);
What I want to do is when the player goes out of range I want the top half of the Mech to slowly rotate back to a flat position facing forward matching the bottom half, this is where I'm stuck, I thought something like -
var lookPos = // This is the part I cant get
var rotation = Quaternion.LookRotation(lookPos);
rotation *= Quaternion.FromToRotation(Vector3.up, Vector3.right);
rotation *= Quaternion.Euler(XattackDegrees, YattackDegrees, 0);
mechTurret.rotation = Quaternion.Slerp(mechTurret.rotation, rotation, Time.deltaTime * turnToLookSpeed);
But I'm not sure of the first part, the Mech is 1 model and the mechTurret is it's Bib-01 Head dragged out of it's hierarchy into a var in the inspector.
Any help will be greatly appreciated, thanks.
Answer by robertbu · Mar 18, 2013 at 06:34 PM
Use the transform.forward of the bottom half. This would be best. Assuming the Mech did not move until the top half rotates back into position, you could also just save the rotation just before your first line of code above and use that.
Your answer
Follow this Question
Related Questions
Use Lerp to rotate object 2 Answers
Basic AI Locked Axis 1 Answer
Rotating Rigidbodies 2 Answers
Rigidbody2d Collision Breaks Quaternion.Slerp 2 Answers
Best rotation function to use 1 Answer