[RESOLU] [DB-AL] Implenter une fréquence de tir

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
BlizZ
Messages : 38
Inscription : 22 Déc 2018 20:59

[RESOLU] [DB-AL] Implenter une fréquence de tir

Message par BlizZ » 22 Jan 2019 20:18

Bonsoir,

Je code un jeu et j'ai un problème qui je suppose et très simple à résoudre mais etant débutant j'ai du mal depuis ce matin..
Je voudrais juste savoir comment "controller le temps" dans mon code, car je voudrais que mon perso puisse tirer (je lui ai deja fait son arme et son code pour qu'il tire) toutes les 2secondes par exemple pour eviter le spam.

code :

Code : Tout sélectionner

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

public class Tir : MonoBehaviour {

    public GameObject Projectil;  //Donner le projectil a lancer
    public int force = 10;        //Donner la force du tir
    public float Distance;        //Regler la portée



	// Use this for initialization
	void Start ()
    {

    }
	
	// Update is called once per frame
	void Update ()
    {



        if (Input.GetMouseButtonDown(0))
        {

                GameObject Boule = Instantiate(Projectil, transform.position, Quaternion.identity) as GameObject;  //Faire apparaitre le projectil a l'emplacement de "eject"
                Boule.GetComponent<Rigidbody>().velocity = transform.TransformDirection(Vector3.forward) * force;  //Donner une force au projectil
                Destroy(Boule, Distance);  //Detruir le projectil "Distance" secondes apres

        }

	}


}
Après sur le meme code si possible je voudrais que je personnage réalise ca mais 3 fois pour créer un rafale.
Je voulais que par exemple il tire une balle, 0.5secondes apres il en tire une autre et 0.5secondes apres la 2eme il en tire une 3eme.

Mais je n'arrive pas a faire tout ca, Il me faudrais la fonction qui me permet d'attendre 1seconde par exemple ou quelque chose dans le style qui pourrait m'aider.

Merci.

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

Re: Problème code c#

Message par Max » 22 Jan 2019 21:54

Bonsoir,
BlizZ a écrit :
22 Jan 2019 20:18
car je voudrais que mon perso puisse tirer toutes les 2secondes par exemple pour eviter le spam.
Ben tu donnes en partie la réponse. Quand tu testes la pression du bouton de la souris, tu dois aussi insérer une condition de temps, genre:

Code : Tout sélectionner

    private float shoot_timer = 2.0f;   // deux secondes
    private float t = 0;

    // Update is called once per frame
    void Update()
    {
        ...   
        t += Time.deltaTime;
        if (Input.GetMouseButtonDown(0) && t>shoot_timer)
        {
            // TIR
            t = 0;
        }
        ...
    }
BlizZ a écrit :
22 Jan 2019 20:18
Après sur le meme code si possible je voudrais que je personnage réalise ca mais 3 fois pour créer un rafale.
Je voulais que par exemple il tire une balle, 0.5secondes apres il en tire une autre et 0.5secondes apres la 2eme il en tire une 3eme.
Si tu souhaites, lors d'un appuis sur le bouton, créer un tir en rafale de trois coups espacé chacun de 0.5 sec, alors regarde du coté des coroutines.
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

BlizZ
Messages : 38
Inscription : 22 Déc 2018 20:59

Re: Problème code c#

Message par BlizZ » 22 Jan 2019 22:34

Pour la cadence de tir ca fonctionne, merci !

Et par contre j'ai essayé de comprendre les coroutines mais j'ai un peu de mal, j'ai essayé ca pour l'instant mais mon le mot "Rafale" et "FonctionRafale" me font une erreur et je comprend pas pourquuoi..

Code : Tout sélectionner

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

public class Tir : MonoBehaviour {

    public GameObject Projectil;  //Donner le projectil a lancer
    public int force = 10;        //Donner la force du tir
    public float Distance;        //Regler la portée

    public float shoot_timer = 2.0f;   // CdT avec 2 secondes entre chaque tir
    private float t = 0;


    private void Start()
    {
        StartCoroutine(Rafale());
    }
    IEnumerator Rafale()
    {
        t += Time.deltaTime;

        if (Input.GetMouseButtonDown(0) && t > shoot_timer)
        {
            FonctionRafale();
            FonctionRafale();
            FonctionRafale();
        }
    }

    void FonctionRafale()
    {
        GameObject Boule = Instantiate(Projectil, transform.position, Quaternion.identity) as GameObject;  //Faire apparaitre le projectil a l'emplacement de "eject"
        Boule.GetComponent<Rigidbody>().velocity = transform.TransformDirection(Vector3.forward) * force;  //Donner une force au projectil
        Destroy(Boule, Distance);  //Detruir le projectil "Distance" secondes apres
        t = 0;

        yield return new WaitForSeconds(0.5f);
    }


}
Unity m'affiche ca ; Assets/Scenes/Scriptes/Perso/Perso bleu/Tir.cs(50,10): error CS1624: The body of `Tir.FonctionRafale()' cannot be an iterator block because `void' is not an iterator interface type

BlizZ
Messages : 38
Inscription : 22 Déc 2018 20:59

Re: Problème code c#

Message par BlizZ » 23 Jan 2019 00:16

Ok c'est bon j'ai réussi à trouvé la solution, merci !

Répondre

Revenir vers « (C#) CSharp »