Répéter une méthode avec un temps variable

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Adrien3112
Messages : 36
Inscription : 28 Août 2015 19:44

Répéter une méthode avec un temps variable

Message par Adrien3112 » 03 Mars 2017 21:16

Bonjour tout le monde :-D Je suis actuellement en train de développer un petit jeu mais bloque sur un point depuis plusieurs jour :
Je voudrais répéter ma méthode " Instance " un nombre indéfini de fois, mais avec un temps qui se raccourcit de plus en plus ( je l'exécute, puis la ré-exécute 1 sec après, puis 0.5 sec après... ). J'ai beaucoup cherché mais n'ai rien trouvé que j'arrive à mettre en place efficacement. Comment puis-je faire ceci ? Merci d'avance :P

Code : Tout sélectionner

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

public class Instancier : MonoBehaviour {

    public GameObject Rouge;
    public GameObject Bleu;
    public GameObject Vert;
    int Hasard;
    int Min = 1;
    int Max = 10;
    float RepeatRate = 0.5f;
    void Start()
    {
        InvokeRepeating("Instance", 0.1f, RepeatRate);
    }
    void Update()
    {
        Hasard = Random.Range(Min, Max);
    }
   
    void Instance()
    {
        
        if(Hasard == 1 || Hasard == 4 || Hasard == 7)
        {
            Instantiate(Bleu, this.transform.position, this.transform.rotation);
        }
        else if (Hasard == 2 || Hasard == 5 || Hasard == 8)
        {            
            Instantiate(Vert, this.transform.position, this.transform.rotation);
        }
        else if (Hasard == 3 || Hasard == 6 || Hasard == 9)
        {            
            Instantiate(Rouge, this.transform.position, this.transform.rotation);
        }
    }
  
}


Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: Répéter une méthode avec un temps variable

Message par simonj » 04 Mars 2017 03:31

Salut,

Tu fais simplement une co-routine qui attends le nombre de seconde que tu veux dans une boucle. Ainsi tu pourras facilement changer le temps d'attente dans chaque tour de boucle.

Code : Tout sélectionner

bool stopRoutine = false;
IEnumerator LaunchAndLoop(float a_second)
{
	float count = 1f;

	while(!stopRoutine)
	{
		yield return new WaitForSeconds(a_second / count);
		Invoke("Instance");
		count++;
		
		/* // Si tu veux sortir de ta boucle à un certain donné
		if(a_second / count <= 0.01)
			stopRoutine  = true;
		*/
	}
}
Tu peux arrêter ta boucle en mettant le booléen "stopRoutine" à true. Et à toi de voir comment tu gères tes temps. Ca peux être dans un tableau de temps et tu vas chercher à l'index "count" (Si c'est plus grand que la taille de ton tableau, tu prends la dernière valeur de ton tableau). Ou alors tu te fais une formule mathématique pour te calculer ton temps. A toi de voir ;)

Adrien3112
Messages : 36
Inscription : 28 Août 2015 19:44

Re: Répéter une méthode avec un temps variable

Message par Adrien3112 » 05 Mars 2017 16:16

Re-bonjour et désolé de ne pas avoir répondu avant ( je n'ai pas eu le temps :oops: ).
Et surtout merci beaucoup ! Plus que deux ou trois trucs à modifier et c'est parfait !
Ps ( pour ceux ne sachant pas faire, on ne sait jamais ) : il faut mettre StartCoroutine(string LaMethode); dans la void Start()

Répondre

Revenir vers « Scripting »