- Home /
Slowing velocity in Rotation?
Hello everyone,
I'm working in a script that makes a 3d Object spin with the mouse. The rotations works very well, then when the 3d object stops and wait for 2 seconds and then return to the origin point of rotation.
But I need to control the velocity of returning, because now is so fast. I tried with Quaternion.Slerp, but I don't know very well how to put it.
Thanks for your time,
Please see to my Script.
var rotationSpeed = 20; // rotation speed
var rotationStart = 0.0; // rotation on start
var speed = 0.1; // return speed
function Awake () {
transform.Rotate(rotationStart,0,0);
}
function Update (){
if (Input.GetButton("Fire1")){
transform.eulerAngles.y = (transform.eulerAngles.y - Input.GetAxis("Mouse X") * rotationSpeed);
}
if (Input.GetButtonUp ("Fire1")) {
StartCoroutine("Return",2);
}
}
function Return(){
yield WaitForSeconds (2.0);
transform.rotation = (Quaternion.Slerp (rotationStart,0,0) Time.time * speed);
}
Thanks in advance
Answer by robertbu · Jan 15, 2013 at 07:45 PM
Quaternion.Slerp() needs to be called from or inside Update() so it is called repeatedly. And your method call here is incorrect...should be something like Quaternion.Slerp(transform.rotation, Quaternion.identy, Time.time * speed); Also take a look at Quaternion.RotateTowards() if you want constant speed.
Hi Robert, I made this change but still is not working, can you please tell me what is wrong with my script?
var rotationSpeed = 20;
var rotationStart = 0.0;
var speed = 0.1;
function Awake () { transform.Rotate(rotationStart,0,0);
}
function Update (){
if (Input.GetButton("Fire1")){
transform.eulerAngles.y = (transform.eulerAngles.y - Input.GetAxis("$$anonymous$$ouse X") * rotationSpeed);
}
if (Input.GetButtonUp ("Fire1")){
Return(); }
}
function Return(){
yield WaitForSeconds (2.0); Quaternion.Slerp(transform.rotation, Quaternion.identy, Time.time * speed);
}
Quaternion.Slerp needs to be called every frame. Your code only calls it very two seconds. Try this:
var rotationSpeed = 2;
var rotationStart = 0.0;
var speed = 0.1;
var rotatehome = false;
function Awake ()
{
transform.Rotate(rotationStart,0,0);
}
function Update ()
{
if (Input.GetButton("Fire1"))
{
rotatehome = false;
var foo : float = Input.GetAxis("$$anonymous$$ouse X");
Debug.Log(foo);
transform.eulerAngles.y = (transform.eulerAngles.y - Input.GetAxis("$$anonymous$$ouse X") * rotationSpeed);
Return();
}
else if (rotatehome)
{
transform.rotation = Quaternion.RotateTowards(transform.rotation, new Quaternion(0,0,0,1), rotationSpeed);
}
}
function Return()
{
yield WaitForSeconds (2.0);
rotatehome = true;
}
Your answer
Follow this Question
Related Questions
Return to the point of rotation? 2 Answers
A node in a childnode? 1 Answer
Rotation problem 1 Answer
Minimum distance on configurable joint? 2 Answers
Lerp 180 degrees while holding B and lerp back 180 degrees when let go of B. 2 Answers