Dieses Skript aufgerufen, wenn der Benutzer die Maustaste loslassen:Probleme mit Rotationsskripten?
float rot_duration = 3f;
float rot_speed = 1.8f;
Quaternion final_rot;
void Start()
{
cubeMesh = GameObject.FindWithTag("CubeMesh");
Vector3 initial_rot = transform.rotation.eulerAngles;
final_rot = Quaternion.Euler(new Vector3(initial_rot.x, initial_rot.y, 180));
}
public void Update()
{
if (Input.GetMouseButtonUp(0))
{
StartCoroutine (DelayRotate (0.1F));
}
}
IEnumerator DelayRotate(float waitTime)
{
yield return new WaitForSeconds (waitTime);
float rot_elapsedTime = 0.0F;
while (rot_elapsedTime < rot_duration) {
cubeMesh.transform.rotation = Quaternion.Slerp (transform.rotation, final_rot, rot_elapsedTime);
rot_elapsedTime += Time.deltaTime * rot_speed;
yield return null;
}
}
Dieses Skript macht ein Gameobject drehen, 0,1 Sekunden nach dem Release Maustaste. Das Problem ist, dass es das GameObject schnell "umdreht" und sich dann dreht.
Ich glaube, es ist wegen final_rot2 = Quaternion.Euler(new Vector3(initial_rot.x, initial_rot.y, 180));
Spiegeln (wegen 180
Wert) Was sollte ich stattdessen tun?
@Prix Die 'while' es sein muss, sonst wird es nicht drehen. –
niemals quaternions *** aus irgendeinem Grund - jemals ***. Verwenden Sie den Aufruf "Drehen". Transform.Rotate (Time.deltaTime, 0, 0); viele Beispiele hier http://docs.unity3d.com/ScriptReference/Transform.Rotate.html – Fattie
Worin ist final_rot initialisiert? – Programmer