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 ?
Quaternions
Re: Quaternions
hm rotation et local rotation
peut etre que un petit bout de ton code concernant le mouvement de ton avion serais pratique pour y voir plus clair
peut etre que un petit bout de ton code concernant le mouvement de ton avion serais pratique pour y voir plus clair
Re: Quaternions
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 :
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...
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);
-
- Messages : 18
- Inscription : 24 Mars 2010 19:05
Re: Quaternions
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 :
Les looping semblent bien passer avec ce code.
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;
}
-
- Messages : 18
- Inscription : 24 Mars 2010 19:05
Re: Quaternions
C'est bon, ça fonctionne !!
http://chloridrik.free.fr/lab/fly/
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.
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.
Re: Quaternions
merci pour nous faire partager ton script...
dommage qu'il est pour les avions ; je fais un mini sous-marin...lol !
dommage qu'il est pour les avions ; je fais un mini sous-marin...lol !