Rotate an object with Quaternion.Lerp without keeping press a key.
Hi guys. I want rotate an object 90º with Quaternion.Lerp, but I need do it just pressing a key once.
using UnityEngine;
using System.Collections;
public class Rotator : MonoBehaviour {
// Use this for initialization
void Update () {
if (Input.GetMouseButton(0))
{
transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler( new Vector3(0,90,0)), 10*Time.deltaTime);
}
}
}
So I need use Input.GetMouseButtonDown(0) instead of Input.GetMouseButton(0) and get the same result (or something that do what I want, rotate an object smoothly). Thanks.
This is what you are looking for.
$$anonymous$$onoBehaviour.StartCoroutine
I'd write a full example but there are hundreds on here already (and I'm lazy). Just search Coroutines.
Thanks You! I get the information I needed here: http://answers.unity3d.com/questions/59143/quaternionlerp-inside-a-coroutine.html
$$anonymous$$y final code is this: using UnityEngine; using System.Collections;
public class Rotatorrr : $$anonymous$$onoBehaviour {
// Use this for initialization
private float OiginalTime;
void Update () {
StartCoroutine(Rotator(1.0F));
}
IEnumerator Rotator (float time)
{
if (Input.Get$$anonymous$$ouseButtonDown(0))
{
OiginalTime = time;
while (time>0)
{
time -= Time.deltaTime;
transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler( new Vector3(0,90,0)), 1-(time/OiginalTime));
yield return new WaitForSeconds(0);
}
}
}
}
I still not being sure about how its works, even when I have "WaitForSeconds(0)" I need to use StartCoroutine and that stuff.
You've got the basis of what you need there but you should run StartCoroutine(Rotator(1.0F));
on the if (Input.Get$$anonymous$$ouseButtonDown(0))
rather than calling it on update.
So you should be doing:
void Update () {
if (Input.Get$$anonymous$$ouseButtonDown(0))
{
StartCoroutine(Rotator(1.0F));
}
}
...and remove the input from the IEnumerator so it looks like this:
IEnumerator Rotator (float time)
{
OiginalTime = time;
while (time>0)
{
time -= Time.deltaTime;
transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler( new Vector3(0,90,0)), 1-(time/OiginalTime));
yield return new WaitForSeconds(0);
}
}
It will probably also be better to use a for loop rather than a while.
Your answer
Follow this Question
Related Questions
UnityException: Transform child out of bounds (C# Unity) 0 Answers
function behave unexpectedly inside a coroutine. 0 Answers
Coroutine: delay transform rotation but start transform movement immediately 2 Answers
GameObject not changing position in PlayMode although the Transform changes 1 Answer
Auto level an object 0 Answers