Page 1 sur 1

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

Publié : 03 Mars 2017 21:16
par Adrien3112
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);
        }
    }
  
}


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

Publié : 04 Mars 2017 03:31
par simonj
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 ;)

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

Publié : 05 Mars 2017 16:16
par Adrien3112
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()