Ça parait aberrant ce que tu écris. Ça te double le roulis...
J'ai regardé un peu sur le net concernant l'ordre des rotations:
Code : Tout sélectionner
//roll
transform.Rotate(0f, 0f, roll, Space.Self);
// pitch
transform.Rotate(pitch, 0f, 0f, Space.Self);
// yaw
transform.Rotate(0f, yaw, 0f, Space.Self);
Donc d'après ceci, ton gameObject doit d'abord faire une rotation sur Z, puis X et enfin Y.
Donc, teste avec un GameObject Empty, parent de ton bateau qui subira les transformations comme suit.
Code : Tout sélectionner
transform.localEulerAngles = new Vector3 (0f, 0f, tang);
transform.localEulerAngles += new Vector3 (roulis, 0f, 0f);
transform.localEulerAngles += new Vector3 (0f, lacet, 0f);
J'espère que ce sera un peu plus concluant...