IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unity Discussion :

Aide pour changer la position de tir en fonction des mouvements du joueur


Sujet :

Unity

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Aide pour changer la position de tir en fonction des mouvements du joueur
    Bonjour,

    Je travaille sur un petit jeu 2D sur Unity et j'ai besoin d'aide sur quelque chose.
    J'ai un joueur qui peut marcher à droite et à gauche. Il peut aussi lancer des Shuriken mais seulement vers la droite.
    Il a une position de tir devant lui.

    J'aimerais savoir comment changer cette position de tir en même temps que son mouvement, et aussi, lorsque le joueur marche vers la gauche, comment lancer le Shuriken dans cette direction.

    Merci de votre aide.


    PlayerMovement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    void Update(){
     
            if (!timerHasBegin){
                Timer.instance.BeginTimer();
                timerHasBegin =true;
            }
     
            horizontalMovement = Input.GetAxis("Horizontal") * moveSpeed * Time.fixedDeltaTime;
            verticalMovement = Input.GetAxis("Vertical") * climbSpeed * Time.fixedDeltaTime;
     
            if (Input.GetButtonDown("Jump") && isGrounded){
                AudioManager.instance.PlayClipAt(jumpSound,transform.position);
                isJumping = true;
            }
            Flip(rb.velocity.x);
            float characterVelocity = Mathf.Abs(rb.velocity.x);
            animator.SetFloat("Speed", characterVelocity);
            animator.SetBool("isClimbing", isClimbing);
     
            if ((Input.GetKeyDown(KeyCode.LeftControl)||Input.GetKeyDown(KeyCode.RightControl)) && (!shotActivated) ){
                StartCoroutine(ShurikenShot());
            }
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        public IEnumerator ShurikenShot(){  
            Instantiate(bulletToFire, firePoint.position,firePoint.rotation);
            AudioManager.instance.PlayClipAt(shurikenSound,transform.position);
            shotActivated = true;
            yield return new WaitForSeconds(timeBetweenShurikens);
            shotActivated =false;
        }
    Shuriken :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public class ShurikenScript : MonoBehaviour
    {
        public float speed ;
        public Rigidbody2D therigidbody2D;
     
        void Start(){
     
        }
     
        void Update(){
     
            therigidbody2D.velocity = transform.right*speed;
            Debug.Log(therigidbody2D.velocity);
            transform.Rotate(5,0,0);
        }

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    janvier 2014
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2014
    Messages : 534
    Points : 1 839
    Points
    1 839
    Par défaut
    Bonsoir,

    Quand tu dis "changer la position de tir en même temps que son mouvement", je pars du principe que tu parles d'appliquer l'inertie de ton joueur à ses projectiles. Si c'est pas le cas, dis-le nous.

    Il te faut déjà compléter un peu ta classe ShurikenScript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     public class ShurikenScript : MonoBehaviour
    {
        public float speed ;
        public Rigidbody2D therigidbody2D;
     
        private float direction;
        private Vector2 offset;
     
        void Update()
        { 
            therigidbody2D.velocity = (speed * direction) + offset;
            Debug.Log(therigidbody2D.velocity);
            transform.Rotate(5,0,0);
        }
     
        public void SetDirection(float direction, Vector2 offset)
        {
             this.direction = direction;
             this.offset = offset;
        }
    On rajoute 2 variables, une pour sauvegarder la direction, et l'autre pour l'inertie du joueur.

    Puis on rajoute une méthode pour pouvoir changer la valeur de ces nouvelles variables. Enfin on utilise tout ça dans la méthode Update.

    Ensuite la méthode ShurikenShot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public IEnumerator ShurikenShot()
    {  
        var shuriken = Instantiate(bulletToFire, firePoint.position,firePoint.rotation).GetComponent<ShurikenScript>();
        var direction = Math.Sign(rb.velocity.x); 
     
        shuriken.SetDirection(direction, rb.velocity);
     
        AudioManager.instance.PlayClipAt(shurikenSound,transform.position);
        shotActivated = true;
        yield return new WaitForSeconds(timeBetweenShurikens);
        shotActivated =false;
    }
    On stock le shuriken instancié pour pouvoir utiliser la méthode SetDirection, on récupère le signe de sa vélocité sur l'axe X, et on utilise ça + la vélocité du joueur.

    Voilà l'idée, j'ai pas du tout testé le code mais ça devrait marcher.

    Il y a plusieurs choses à améliorer aussi dans le code mais voyons voir déjà si ça te convient.
    Keep calm and debug it

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Salut,
    Tout d'abord merci pour ta réponse complète.
    En revanche j'ai une erreur sur cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    therigidbody2D.velocity = (speed * direction) + offset;
    Pas d'addition entre float et Vector2, et je t'avoue que je gère mal tout ce qui est addition de force etc.

    Comment corriger ça ?

    Merci encore !

  4. #4
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    janvier 2014
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2014
    Messages : 534
    Points : 1 839
    Points
    1 839
    Par défaut
    Bonsoir,

    Désolé j'ai écris le code un peu vite, en effet il râle pour une bonne raison, j'essaye d'additionner un float avec un Vector2.

    Il suffit d'en créer un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    therigidbody2D.velocity = new Vector2(speed * direction, 0) + offset;
    Avec uniquement les valeurs en X.
    Keep calm and debug it

Discussions similaires

  1. Besoin d'aide pour changer un lien
    Par tvertain dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/12/2008, 17h17
  2. aide pour changer le pointeur de la souris
    Par samia21 dans le forum IHM
    Réponses: 6
    Dernier message: 25/04/2008, 14h56
  3. Réponses: 1
    Dernier message: 12/11/2007, 14h04
  4. besoin d'aide pour changer le 'target' d'un menu en javascript
    Par Floydz dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/09/2007, 17h46
  5. Aide pour changer de couleur sur les primitifs GLUT
    Par romainhoarau2764 dans le forum GLUT
    Réponses: 3
    Dernier message: 19/03/2005, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo