[Résolu] [DB AL] faire une action uniquement pendant une durée précise

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
Crazygle
Messages : 9
Inscription : 11 Déc 2016 21:02

[Résolu] [DB AL] faire une action uniquement pendant une durée précise

Message par Crazygle » 15 Déc 2016 19:59

Bonjour,

Je voudrais faire un script qui dit que je peux detruire un gameobject uniquement pendant une duée precise en appuyant sur une touche comme"a".
J'ai créé le script mais ca ne marche pas :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class zombieun : MonoBehaviour {
	public GameObject target;
	public float timer = 7f;
	public float realtime = 0f;
		

	void Start () {

		target.SetActive (false);
		Invoke ("activatetarget", 5);

	}
	

	void activatetarget () {
	
		target.SetActive (true);
	}


		void Update () {

		target.transform.Translate (-Time.deltaTime, 0, 0);

	 

		timer = realtime + Time.timeSinceLevelLoad;
	
		if ( Input.GetKey("a") && timer == realtime)
		{
			Destroy(target);



		}
	}
	}
Cordialement,
Dernière édition par Crazygle le 18 Déc 2016 15:49, édité 4 fois.

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

Re: [DB AL] faire une action uniquement pendant une durée précise

Message par boubouk50 » 16 Déc 2016 10:28

Comprends tu seulement ce que tu fais?

Je te fais le résumé:
timer = realtime + Time.timeSinceLevelLoad; ton timer vaut le temps depuis le début + une constante Realtime (qui j'espère est autre que 0 sinon totalement inutile...)
if (timer == realtime) si timer vaut realtime alors on détruit. Je pose les maths:
timer = timeSLL + realtime et timer = realtime (pour que la condition soit remplie), donc
timeSLL + realtime = realtime donc
timeSLL = 0 pour que la condition soit remplie.
Or ici, timeSLL ne vaut 0 qu'au départ de la scène soit une seule et unique fois. Donc la possibilité pour toi de détruire la target est uniquement à la première frame de la scène.

Cherche un peu sur le forum, il y a plein d'exemples de timer (au moins une trentaine, c'est récurrent comme demande)
Je t'invite aussi à faire une recherche avec le mot clé openclassrooms pour que tu tombes sur les posts qui répertorient les sites et tutos de programmation.
"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

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB AL] faire une action uniquement pendant une durée précise

Message par Moi 1971 » 16 Déc 2016 11:52

Bonjour,
et en plus de ce qu'a dit Boubouk, si tu veux
..uniquement pendant une duée precise
il va falloir définir cette durée!
Une durée ça peut être plusieurs choses. Çà peut-être un début et une fin, ou une heure de la journée (genre 14h quelque soit les minutes, donc une durée de 60 mn en tout) etc...
Je ne vois nul part dans ton code où tu définis cette durée. en suite il te faut comparer l'heure réel avec cette valeur.

Crazygle
Messages : 9
Inscription : 11 Déc 2016 21:02

Re: [DB AL] faire une action uniquement pendant une durée précise

Message par Crazygle » 17 Déc 2016 11:22

J'ai chercher vraiment partout et je ne trouve pas...
J'ai essayé ça mais ça ne fonctionne pas :

Code : Tout sélectionner

 Invoke ("appuyera", 7 >> 9);

 void appuyera () {


		if (Input.GetKey(KeyCode.A))

			Destroy(target);
		
		

		}
	}

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB AL] faire une action uniquement pendant une durée précise

Message par Moi 1971 » 17 Déc 2016 11:33

Bon,
si tu veux qu'on puisse t'apporter un peu d'aide il va falloir que tu répondes aux questions :
Quelle est la durée ?!!!... A quoi correspond elle? quelle est sa dimension?

Crazygle
Messages : 9
Inscription : 11 Déc 2016 21:02

Re: [DB AL] faire une action uniquement pendant une durée précise

Message par Crazygle » 18 Déc 2016 01:07

La durée est de deux secondes a partir de 7 secondes depuis le début du jeu jusqu'à 9 secondes. Voilà.

Et la durée correspond au moment et uniquement ce moment ou le joueur peut appuyer 'a' pour détruire un gameobject

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB AL] faire une action uniquement pendant une durée précise

Message par Moi 1971 » 18 Déc 2016 12:45

Bonjour,
donc le script doit attendre 7 secondes depuis le début du jeu.. je vais remplacer "début du jeu" par "depuis la création du G.O.
Dans Unity le temps qui s'écoule est mesuré par la classe Time. Le temps est en seconde et s'enregistre dans une variable float.
La valeur Time.time retournée par Unity est le temps qui s'est écoulé depuis le début du jeu et au moment pile-poile du début de la frame actuelle. (Si tu ne sais pas se qu'est une frame dans Unity il faut que tu fasses les tutos niveau débutant).
Donc on a :

Code : Tout sélectionner

Debut du G.O. : Time.time -> T
Si (T+7< Time.time< T+9)
{
  Si (Touche A)
  {
    Destruction du G.O cible
  }
}
En C# (écrit direct ici, pas testé en vrai, y a peut-être des erreurs de frappe)

Code : Tout sélectionner

public class zombieun : MonoBehaviour {
   public GameObject cible;
   private float limite_Base;
   private float limite_Haute;
      

   void Start () {
      target.SetActive (false);
      limite_Base = Time.time+7;
      limite_Haute = Time.time+9;
   }
   

   void activatetarget () {
   
      target.SetActive (true);
   }


  void Update () {
    target.transform.Translate (-Time.deltaTime, 0, 0);
    if ((limite_Base < Time.time) && (Time.time < limite_Haute )) 
       {
        if (Input.GetKey(KeyCode.A))
        {
          Destroy(target);
         }
      }
   }
   }

Crazygle
Messages : 9
Inscription : 11 Déc 2016 21:02

Re: [DB AL] faire une action uniquement pendant une durée précise

Message par Crazygle » 18 Déc 2016 15:49

Bonjour

Merci mille fois. Le code fonctionne :-D

Sujet résolu.

Répondre

Revenir vers « (C#) CSharp »