2016-02-02 1 views
1

Je veux faire un objet (disons un cube), tourner à un rythme constant sur le même axe que celui sur lequel il se déplace. Donc, si elle change de direction de X à Z, alors la rotation s'éloignera de l'axe X dans l'axe Z et continuera ensuite à tourner sur l'axe Z.Untiy Faire tourner un objet le long de son axe

Comment pourrais-je y parvenir? Voici ce que j'ai en ce moment, le cube tourne juste sur l'axe z d'avant en arrière dans un certain degré.

public float Angle; 
public float Period; 

void Update() 
{ 
    Animate(); 
} 

void Animate() 
{ 
    _time = _time + Time.deltaTime; 
    float phase = Mathf.Sin(_time/Period); 
    transform.localRotation = Quaternion.Euler(new Vector3(0f, 0f, phase * Angle)); 
} 
+0

'Sur le même axe, il se déplace' serait difficile si le mouvement ne se trouve pas exactement sur l'un des axes. Considérons le vecteur velicoty 'v = (0,1,2)'. Où irait la rotation résultante? Vous pourriez essayer par exemple normaliser le vecteur de vitesse (qui vous donne la direction générale dans laquelle l'objet se déplace), puis tourner en utilisant ce vecteur (multiplié par une constante pour contrôler la vitesse de rotation). –

+0

en général, n'utilisez PAS de Quaternions pour quelque raison que ce soit. utilisez simplement un appel RotateAround trivial. – Fattie

+0

Copie possible de [Rotation autour d'un point par rapport à la position et à la rotation du modèle] (http://stackoverflow.com/questions/13404372/rotating-around-a-point-relative-to-model-position-and-rotation) – Fattie

Répondre

2

Il suffit d'utiliser

RotateAround 

Remarque utilisent généralement jamais Quaternion pour une raison quelconque.

Il y a des milliers de questions sur l'utilisation de RotateAround, donc juste google. Dans votre cas, il semble que vous changiez (lerping, peu importe) l'axe de rotation lui-même.