engendrer une translation à l'appui d'une touche

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
Avatar de l’utilisateur
Kaloverian
Messages : 342
Inscription : 10 Août 2016 03:03

engendrer une translation à l'appui d'une touche

Message par Kaloverian » 20 Avr 2020 14:02

bonjour,

La plupart des tutos de jeux vidéos utilisent un Rigidbody avec un AddForce mais je souhaite passer pr une translation.Or celle-ci ne fonctionne pas si elle est déclenchée à l'appui d'une touche.

Voici mon code où la translaton continue ne fonctionne pas à l'appui d'une touche:

Code : Tout sélectionner

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

//ce script a pour but de translater des loadBullet(tirs),parenté au tireur à cahque appui d'une touche

public class translater_tirs : MonoBehaviour {

    public GameObject tir,tireur;
   
    public KeyCode tirer,droite_tireur,gauche_tireur;
   // bool trans=true;
  

    void Tirer(GameObject objet)
	{   
         objet.transform.Translate(0,1,0,Space.Self); }
    }



	// Use this for initialization
	void Start () {

        tir.transform.parent=tireur.transform;
		
	}
	
	// Update is called once per frame
	void Update () {

     
    

        if(Input.GetKeyDown(tirer))
		{ tir.transform.parent=null;
      
      
           // tir.transform.Translate(0,1,0,Space.Self);//tir non continu
           // tir.transform.Translate(0,Time.deltaTime,0,Space.Self);//tir non continu
          
		}

        if(Input.GetKeyDown(droite_tireur))

		  {  tireur.transform.Translate(1,0,0,Space.Self); }

          if(Input.GetKeyDown(gauche_tireur))

		  {  tireur.transform.Translate(-1,0,0,Space.Self); }


        Tirer(tir);
      
	}
}


J'ai beau triturer ce code en incluant une variable booléenne mais ça ne fonctionne pas.

Pouvez-vous m'aider?

merci

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: engendrer une translation à l'appui d'une touche

Message par djulio74 » 20 Avr 2020 14:32

L'appui sur une touche ne s'applique que durant une seul frame, c'est pourquoi ça ne marche pas.
Tu peux sinon passer par une coroutine.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: engendrer une translation à l'appui d'une touche

Message par EmileF » 20 Avr 2020 15:11

Ou alors utilise Input.GetKey(...) pour avoir la pression de la touche sur plusieurs frames
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Avatar de l’utilisateur
Kaloverian
Messages : 342
Inscription : 10 Août 2016 03:03

Re: engendrer une translation à l'appui d'une touche

Message par Kaloverian » 20 Avr 2020 15:13

solution trouvée:

Code : Tout sélectionner

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

//ce script a pour but de translater des loadBullet(tirs),parenté au tireur à cahque appui d'une touche

public class translater_tirs : MonoBehaviour {

    public GameObject tir,tireur;
   
    public KeyCode tirer,droite_tireur,gauche_tireur;
   // bool trans=true;
   int k=0;

    void Tirer(GameObject objet)
	{   
        { objet.transform.Translate(0,1,0,Space.Self); }
    }



	// Use this for initialization
	void Start () {

        tir.transform.parent=tireur.transform;
		
	}
	
	// Update is called once per frame
	void Update () {

      
        if(Input.GetKeyDown(tirer))
		{
            k++;
            tir.transform.parent=null;
            // trans=true;//trans au début de Update revient immédiatement à false
            // tir.transform.Translate(0,1,0,Space.Self);//tir non continu
            // tir.transform.Translate(0,Time.deltaTime,0,Space.Self);//tir non continu
        }
           

        if(Input.GetKeyDown(droite_tireur))

		  {  tireur.transform.Translate(1,0,0,Space.Self); }

          if(Input.GetKeyDown(gauche_tireur))

		  {  tireur.transform.Translate(-1,0,0,Space.Self); }

   while(k>0)
            { Tirer(tir);
                break;}
        // print("valeur booléenne de trans :"+trans);
	}
}


Répondre

Revenir vers « (C#) CSharp »