Quaternions

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
chloridrik
Messages : 18
Inscription : 24 Mars 2010 19:05

Quaternions

Message par chloridrik » 02 Avr 2010 11:02

Bonjour,
je suis nouveau sur unity (une ou deux semaines) j'ai lu le post sur le sous-marin, et moi aussi j'ai des soucis de quaternions...

j'ai codé ce jeu d'avion :
http://chloridrik.free.fr/lab/fly/
en utilisant des rotations et des localRotation, mais quand l'avion est sur le dos, ça pose un gros problème (par exemple lors d'un looping)

Il me semble que c'est un problème de quaternions... vous en pensez quoi ?

Avatar de l’utilisateur
giyomuSan
Messages : 1799
Inscription : 09 Déc 2009 14:52
Localisation : Japon

Re: Quaternions

Message par giyomuSan » 03 Avr 2010 03:16

hm rotation et local rotation :? :mrgreen:

peut etre que un petit bout de ton code concernant le mouvement de ton avion serais pratique pour y voir plus clair :)

Avatar de l’utilisateur
Anterius
Messages : 13
Inscription : 07 Avr 2010 16:58
Localisation : PACA
Contact :

Re: Quaternions

Message par Anterius » 07 Avr 2010 17:07

Hello,

Nouveau membre et aussi le meme problème de flip avec les quaternion...
pourtant j'ai vraiment passé beaucoup de temps sur les forums !

voici 1 bout de code :

Code : Tout sélectionner

private var rotationX : float = 0;
private var rotationY : float = 0;

function Start ()
{
   originalRotation = transform.localRotation;
}

// Adds a force upwards in the global coordinate system
function FixedUpdate () {
   
   // Read the mouse input axis
   rotationX += Input.GetAxis("Mouse X") * turnSensitivity;
   rotationY += Input.GetAxis("Mouse Y") * turnSensitivity;    

   xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
   yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);
   
   transform.localRotation = originalRotation * xQuaternion * yQuaternion;
   transform.Rotate(Vector3.up, horizontal*(rotation.z % 90) / 90 * vertical, Space.World);

  if (Input.GetKey ("1")) {
      transform.eulerAngles.x=0;
      }

if (Input.GetMouseButton(0)) {
rigidbody.velocity = transform.forward * Time.deltaTime * swimSpeed;
}

if (Input.GetMouseButton(1)) {
rigidbody.velocity = transform.forward * Time.deltaTime * (-swimSpeed/3);
apparemment la réponse intéresse pas mal de monde, donc merci a ceux qui se pencheront sur le problème, en introduisant une limitation sur l'axe des x...

chloridrik
Messages : 18
Inscription : 24 Mars 2010 19:05

Re: Quaternions

Message par chloridrik » 12 Avr 2010 13:29

J'ai refait un test bien simplifié juste pour travailler sur les quaternions, et voila ce que ça donne :

http://chloridrik.free.fr/lab/quaternion/
Les touches : haut, bas, gauche, droite, Q, D.


Au niveau du code, le voici :

Code : Tout sélectionner

private var __rotationX:float = 0;
private var __rotationY:float = 0;
private var __rotationZ:float = 0;


function Update () {
	if(Input.GetKey("left")) __rotationY+=10;
	if(Input.GetKey("right")) __rotationY-=10;
	if(Input.GetKey("up")) __rotationX+=10;
	if(Input.GetKey("down")) __rotationX-=10;
	if(Input.GetKey("q")) __rotationZ-=3;
	if(Input.GetKey("d")) __rotationZ+=3;

	var rotation = Quaternion.identity;
	rotation.eulerAngles = Vector3(__rotationX, __rotationY, __rotationZ);
	transform.localEulerAngles = rotation.eulerAngles;
	
	transform.position += transform.forward*50* Time.deltaTime;

}
Les looping semblent bien passer avec ce code.

chloridrik
Messages : 18
Inscription : 24 Mars 2010 19:05

Re: Quaternions

Message par chloridrik » 12 Avr 2010 20:03

C'est bon, ça fonctionne !!

http://chloridrik.free.fr/lab/fly/

Code : Tout sélectionner

	transform.Rotate(Vector3(__rotationX, __rotationY,__rotationZ));
	transform.position += transform.forward*__speed* Time.deltaTime;

Avant, je mettais des rotations séparées pour les x y z ainsi que pour les positions. Avec un vector3 ça passe nikel. en fait, pas besoin de quaternions.

Avatar de l’utilisateur
Anterius
Messages : 13
Inscription : 07 Avr 2010 16:58
Localisation : PACA
Contact :

Re: Quaternions

Message par Anterius » 17 Avr 2010 17:18

merci pour nous faire partager ton script...
dommage qu'il est pour les avions ; je fais un mini sous-marin...lol !

Répondre

Revenir vers « Scripting »