[Résolu][C#] Faire pivoter mon joueur

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Ginji
Messages : 14
Inscription : 03 Juil 2015 16:53

[Résolu][C#] Faire pivoter mon joueur

Message par Ginji » 04 Juil 2015 12:43

Bonjour à tous,

Voila, j'ai décidé d'essayer de réaliser un jeu sur Unity (version 5).
Après plusieurs recherches, et pas de résultats, je me demandai si quelqu'un pourrait m'éclairer pour trouver une solution.

J'aimerai bouger mon perso au clavier, les touches haut et bas servant pour avancer et reculer, les touches gauche et droite pour pivoter.

Ce que je demande: Une aide, un conseil, une piste ou même une ampoule pour m'éclairer. J'aimerai pouvoir apprendre et donc je ne demande pas à ce que quelqu'un code tout mes script à ma place. Maintenant, je laisse la place à mon bout de code...

Code : Tout sélectionner

void Update () 
	{
		Vector3 move = new Vector3 ();

		if (Input.GetKey (KeyCode.UpArrow))
			move.y += m_speed;
		if (Input.GetKey (KeyCode.DownArrow))
			move.y -= m_speed;

		transform.position += move;

               // Partie qui me pose problème //
		Vector3 rotate = new Vector3 ();

		if (Input.GetKey (KeyCode.LeftArrow))
			rotate.x -= m_rotate;
		if (Input.GetKey (KeyCode.RightArrow))
			rotate.x += m_rotate;

		transform.rotation += rotate;
	}
Je reçois le message d'erreur suivant:
Assets/Prefab/Scripts/PersoController.cs(59,27): error CS0019: Operator `+=' cannot be applied to operands of type `UnityEngine.Quaternion' and `UnityEngine.Vector3'
J'ai un peu chipoté, mais sans trouver comment résoudre mon problème. Je pense devoir utiliser les Quaternions, mais je n'ai pas compris comment faire...

Merci pour la lecture.
Dernière édition par Ginji le 07 Juil 2015 11:37, édité 1 fois.

Avatar de l’utilisateur
E3DStef
Administrateur
Administrateur
Messages : 1646
Inscription : 14 Juil 2013 18:30
Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/

Re: [C#] Faire pivoter mon joueur

Message par E3DStef » 04 Juil 2015 15:41

Salut Ginji,

Hum j'ai lu mais perso je ne maitrise pas du tout les quaternions ;-)

Dans ton besoin je serai parti avec des TRANSFORM et des EULERANGLES qui permettent le déplacement, la rotation sur les 3 axes

Enfin ce n'est qu'une piste ;-)

A+
Le Savoir n'est Précieux que s'il est Partagé

Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com

Ginji
Messages : 14
Inscription : 03 Juil 2015 16:53

Re: [C#] Faire pivoter mon joueur

Message par Ginji » 04 Juil 2015 16:04

Merci pour la piste, je vais me renseigner sur les EULERANGLES alors.

Avatar de l’utilisateur
E3DStef
Administrateur
Administrateur
Messages : 1646
Inscription : 14 Juil 2013 18:30
Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/

Re: [C#] Faire pivoter mon joueur

Message par E3DStef » 05 Juil 2015 16:20

Ok, je dois avoir quelques scripts qui fonctionnent dessus aussi n'hésites pas ;-)

Bon WE à toi

A+

Stef
Le Savoir n'est Précieux que s'il est Partagé

Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6245
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [C#] Faire pivoter mon joueur

Message par boubouk50 » 06 Juil 2015 09:34

transform.rotation est un quaternion (sorte de Vector4 ou matrice 4x1) et tu essaies de lui ajouter un Vector3 donc il y incompatibilité.

Tu peux utiliser transformation.rotate() pour effectuer une rotation plutôt que transform.rotation.

Ici pour une rotation de m_rotate degrés par seconde sur l'axe x indépendante du framerate:

Code : Tout sélectionner

transform.rotate(Vector.right * m_rotate * Time.deltaTime);
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Ginji
Messages : 14
Inscription : 03 Juil 2015 16:53

Re: [C#] Faire pivoter mon joueur

Message par Ginji » 07 Juil 2015 11:36

Mon problème est résolu, merci Expert3D, merci boubouk50 pour vos pistes.

Je donne le bout de code résolu pour si jamais un autre débutant venait à bloquer ;)

Code : Tout sélectionner

if( Input.GetKey(KeyCode.LeftArrow))
			transform.Rotate(0,-5f,0);

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6245
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [Résolu][C#] Faire pivoter mon joueur

Message par boubouk50 » 07 Juil 2015 11:56

Attention Ginji,

Ce bout de code est dépendant du framerate, c'est à dire, qu'à 10fps, tu feras une rotation de 50° par seconde, et à 60 fps, 300°. Généralement, ce n'est pas le comportement souhaité.
Pour une rotation fixe sur l'axe Y, il est préférable d'utiliser le code suivant:

Code : Tout sélectionner

float rotationY = -90f;   //a définir: degré de rotation par seconde
if( Input.GetKey(KeyCode.LeftArrow))
         transform.Rotate (0, rotationY * Time.deltaTime, 0);
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Ginji
Messages : 14
Inscription : 03 Juil 2015 16:53

Re: [Résolu][C#] Faire pivoter mon joueur

Message par Ginji » 07 Juil 2015 12:14

Ouille... Merci de le signaler, c'est sur que ce n'est pas le but recherché.

Cela semble effectivement mieux, encore merci :)

Répondre

Revenir vers « (C#) CSharp »