rotation 360 degres

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
zakilex
Messages : 17
Inscription : 10 Nov 2016 15:45

rotation 360 degres

Message par zakilex » 28 Mars 2017 19:11

Bonjour


j'ai un script qui permet, lorsque la touche espace est activer, de faire tourner mon Gameobjet sur lui même sur l'axe x ,


j'aimerai simplement lorsque mon Gameobjet à fait une rotation de 360 dègres sur son axe X détruire mon Gameobjet.

Pouvez vous m'indiquer un code simple en C sharp pour le faire ?

Code : Tout sélectionner

void Update () {

		bool down =Input.GetKeyDown(KeyCode.Space);
		bool held =Input.GetKey(KeyCode.Space);
		bool up = Input.GetKeyUp(KeyCode.Space);
	
		if ( down)   // if ( Input.GetKey(KeyCode.LeftArrow) ) 

		{
			
			//GetComponent<Transform> ().Rotate = new Vector3 (100, 0, 0)* Time.deltaTime;				
		}

		else if (held)
			
		{
			transform.Rotate (Vector3.left,speed * Time.deltaTime);
			Player.GetComponent<Animator> ().enabled = false;
		}
		else if(up) 

		{
			
		}

		else
		{


			transform.Rotate (Vector3.right,speedRotate * Time.deltaTime);
}

merci par avance.

Alexis.

Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

Re: rotation 360 degres

Message par Axel74 » 29 Mars 2017 06:44

Salut, voilà ce que tu cherches :

https://docs.unity3d.com/ScriptReferenc ... stroy.html

Reste plus qu'à donner la condition pour le détruire, en gros tu récupères la valeur en rotation que tu cherches, si elle est supérieur ou égale à telle valeur alors tu le détruis.
Douille ou l'ail que pote étaux ? Yes I like.

zakilex
Messages : 17
Inscription : 10 Nov 2016 15:45

Re: rotation 360 degres

Message par zakilex » 29 Mars 2017 13:39

Merci pour cette réponse mais ce qui m’intéresse le plus c'est plutôt le code qui permet de dire : lorsque mon Gameobjet à fait un 360 ou 350 degres ou autre autour de tel axe ,alors je fait quelque chose...

merci beaucoup.

kosted
Messages : 258
Inscription : 20 Avr 2015 18:21

Re: rotation 360 degres

Message par kosted » 30 Mars 2017 01:39

zakilex a écrit :Merci pour cette réponse mais ce qui m’intéresse le plus c'est plutôt le code qui permet de dire : lorsque mon Gameobjet à fait un 360 ou 350 degres ou autre autour de tel axe ,alors je fait quelque chose...

merci beaucoup.
Bah il t'as donné la solution. Dans ton if, juste après ta rotatio, tu appelles Destroy(tonGameObject)

zakilex
Messages : 17
Inscription : 10 Nov 2016 15:45

Re: rotation 360 degres

Message par zakilex » 30 Mars 2017 13:08

alors je vais reformuler je m'exprime mal :

j'aimerai savoir comment écrire cela proprement et que cela fonctionne, un truc de ce style sur mon Gamobjet:




Code : Tout sélectionner

void FixedUpdate()
	{
		{
			
			if (transform.eulerAngles.x  > 360  ) 

			{	do something...}

merci beaucoup.

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

Re: rotation 360 degres

Message par boubouk50 » 30 Mars 2017 13:48

Le problème est que les valeurs des angles ne sont pas linéaires. En tournant ton objet de 360° sur son axe, tu peux avoir des angles qui vont de 0 à 90 puis retour à 0 qui se transforme en 360 vers 270 puis retourne vers 360 soit 0. Donc ce n'est pas possible, à mon avis, de simplement vérifier les angles.
Par contre, si ton objet opère une rotation, elle vient bien de quelque part, et c'est d'ici qu'il faudrait récupérer les rotations effectuées au fur et à mesure. Si c'est la physique, alors là je ne vois pas par contre.
"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

Avatar de l’utilisateur
evereal
Messages : 109
Inscription : 06 Nov 2015 18:46

Re: rotation 360 degres

Message par evereal » 30 Mars 2017 13:58

Hello, je pense qu'une méthode simple est de retenir une variable de temps pendant lequel ton gameobject a tourné.
Si ton objet tourne a du 60° par seconde, et qu'il tourne pendant 6 secondes, 6*60 = 360° -> il a fait un tour complet

Code : Tout sélectionner

private float rotationSpeed = 60; // la vitesse de rotation est de 60 degré par seconde
private float timeToTurn= 360/rotationSpeed;  le temp pour faire un tour
private float currentTurnTime = timeToTurn;

void Update () {         
       if (Input.GetKey(KeyCode.Space))      {
       float frameTime= Time.deltaTime;
         transform.Rotate (Vector3.left,rotationSpeed * frameTime);
         currentTurnTime -= frameTime;
      }
      if (currentTurnTime <= 0) {
      	Destroy(this);
      }
      
}
“La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !”

Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

Re: rotation 360 degres

Message par Axel74 » 30 Mars 2017 15:05

Je viens d'y penser j'avais déjà eu ce petit soucis sur un ancien projet j'ai bloqué 5 minutes là dessus et j'ai utilisé ceci (je m'en servais pour une rotation à 180° :
https://docs.unity3d.com/ScriptReferenc ... ngles.html

C'est ce qui te permettra de faire ta condition

edit : je rebondi sur la réponse de boubouk avec ce que je te donne, fait attention à ce qui est écrit dans la doc de mon lien, c'est des valeurs absolue et non la valeur de ton angle, donc juste à vérifier comment bidouiller tout ça pour donner la bonne condition.
Douille ou l'ail que pote étaux ? Yes I like.

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

Re: rotation 360 degres

Message par boubouk50 » 30 Mars 2017 16:06

Axel74 a écrit :Je viens d'y penser j'avais déjà eu ce petit soucis sur un ancien projet j'ai bloqué 5 minutes là dessus et j'ai utilisé ceci (je m'en servais pour une rotation à 180° :
https://docs.unity3d.com/ScriptReferenc ... ngles.html

C'est ce qui te permettra de faire ta condition

edit : je rebondi sur la réponse de boubouk avec ce que je te donne, fait attention à ce qui est écrit dans la doc de mon lien, c'est des valeurs absolue et non la valeur de ton angle, donc juste à vérifier comment bidouiller tout ça pour donner la bonne condition.
Nope Nope Nope.
Ce n'est pas possible par cette méthode. Fais le test toi-même: mets un cube dans ta scène, ajoute lui un script avec cette ligne:

Code : Tout sélectionner

void Update () { Debug.Log (transform.localRotation.eulerAngles); }
Ensuite en Play Mode, fait tourner ton cube sur l'axe x depuis la viewport Scene et regarde les Logs consoles: LES VALEURS DES ANGLES NE SONT PAS LINEAIRES !
"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

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: rotation 360 degres

Message par Max » 30 Mars 2017 18:44

Les quaternions pour ce genre de chose, c'est vrai, c'est la plaie.
Souvent on préfèrera passer directement par les info d'orientation de l'objet et un petit calcul trigo:

exemple (pour un gameobject avec des rotations en X)

Code : Tout sélectionner

		float rot360 = -Mathf.Atan2(transform.forward.y, transform.transform.forward.z) * Mathf.Rad2Deg;
		if (transform.forward.y > 0)	rot360 += 360.0f;
sur le même principe, en restant sur les fonctions de l'API (toujours pour un gameobject avec des rotations en X):

Code : Tout sélectionner

		float rot360 = Vector3.Angle ( transform.forward, Vector3.forward);
		if (transform.forward.y > 0)	rot360 = 360.0f - rot360;
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « Scripting »