[RESOLU] [DB-AL] Jeu 2D - Tirer en direction de la souris

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
Badfly
Messages : 62
Inscription : 19 Mai 2017 14:46

[RESOLU] [DB-AL] Jeu 2D - Tirer en direction de la souris

Message par Badfly » 26 Nov 2017 18:03

Bonjour à tous. Voilà je m'essaye à un jeu 2D. Vue de coté à la Mario.

C'est un jeu de tire, le personnage peut aller de gauche à droite, sauter et tirer. Son arme suit la viseur (qui se place sur la souris) et donc pivote sur l'axe Z.
En revanche quand je tire, là balle va soit à droite, soit à gauche, mais si le curseur en en haut à droite de l'écran la balle doit y aller aussi.

Code : Tout sélectionner

    public string nameWeapon;
    public float speedAmmo;
    public GameObject ammo;
    public GameObject posFire;
    public GameObject crossHair;
    
    private void Start()
    {
        crossHair = GameObject.Find("CrossHair");
    }

    public void Shoot()
    {
        GameObject ammo_fired = Instantiate(ammo, posFire.transform.position, transform.rotation) as GameObject;

        ammo_fired.GetComponent<Rigidbody2D>().velocity = new Vector2(crossHair.transform.position.x, crossHair.transform.position.y);
    }
Les balles s'oriente bien vers le viseur mais partent vers la droite ou la gauche.

J'ai essayé aussi avec AddForce plutôt que Velocity :

Code : Tout sélectionner

ammo_fired.GetComponent<Rigidbody2D>().AddForce((transform.forward * speedAmmo) * Time.deltaTime, ForceMode2D.Impulse); 
Mais cette fois les balles apparaissent en direction du viseur, mais elles ne bougent plus ...
Bref, si quelqu'un pouvais éclairer ma lanterne ça serait génial :)
Dernière édition par Badfly le 27 Nov 2017 18:37, édité 2 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Jeu 2D - Tirer en direction de la souris

Message par boubouk50 » 27 Nov 2017 12:10

Salut,
je pense que tu n'as pas compris l'utilisation de ces fonctions et notamment la définition de vecteur.
Lorsque tu tires, tu dois donner un vecteur de direction à ta balle et une vitesse, soit en lui appliquant une force soit en lui donnant directement sa vélocité.
Ici, dans ton premier cas, avec la vélocité, tu donnes la position de CrossHair, qui en soi est traduit par un vecteur de direction partant du centre du monde (0,0) vers la position et une vitesse définie par la taille de ce vecteur.
Dans le second, tu donnes le vecteur Forward du GameObject qui possède ce script. Généralement il s'agit du bon vecteur de direction parce qu'on oriente les objets selon certains axes et celui-ci représente celui de "devant". Mais est-ce le bon? Aussi, une forces comme son nom l'indique, donne aussi la force d'impulsion de départ. Ici, il se peut qu'elle soit trop faible pour lancer ton projectile, essaie de l'augmenter.

Je te conseille d'utiliser l'AddForce () plutôt que de jouer directement sur la vélocité, même si dans ce cas précis d'une balle, tu ne donneras qu'une seule force de départ, donc une vélocité unique.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Badfly
Messages : 62
Inscription : 19 Mai 2017 14:46

Re: [DB-AL] Jeu 2D - Tirer en direction de la souris

Message par Badfly » 27 Nov 2017 17:20

Merci de ta réponse.

Alors si j'ai bien compris avec velocity je devrais plus faire quelque chose comme :

Code : Tout sélectionner

.velocity = new Vector2(crossHair.transform.position.x - transform.position.x, crossHair.transform.position.y - transform.position.y);
Pour l'AddForce(), j'ai fais un petit screen pour bien montrer l'effet : Image

(On ne juge pas, ce sont des assets gratuits trouvé pour faire des tests ^^)

Pourtant j'ai fais varié le speedAmmo de 100 à 10000 cela ne change rien ...

Modif : Avec le code de velocity cela fonctionne marqué plus haut, cela fonctionne. En revanche, si le viseur se trouve proche de mon personnage, le tire est peut fort, alors que si le viseur est loin, le tire est plus fort.
Je précise aussi que pour le AddForce(), j'ai freeze les balles sur l'axe Y pour voir l'orientation. Si je décoche, les balles tombent tout simplement à la sortie du canon.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Jeu 2D - Tirer en direction de la souris

Message par boubouk50 » 27 Nov 2017 17:55

Comme je te l'ai dit, la vélocité est une vitesse issue d'une force dans une direction. Ici, en donnant la direction (position B - position A) tu donnes implicitement la vitesse qui est la magnitude de ton vecteur. Si les deux objets sont proches la magnitude est faible alors la vélocité aussi donc la vitesse de déplacement également. Il faut donc normaliser ton vecteur et le multiplier par la vitesse voulue.

Code : Tout sélectionner

Vector2 bulletVelocity = new Vector2(crossHair.transform.position.x - transform.position.x, crossHair.transform.position.y - transform.position.y);
.velocity = bulletVelocity.normalized * speedBullet; //définir la bonne vitesse
Pour le AddForce (), tu ne touches plus du tout à la vélocité? (Les deux sont interconnectés)
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Badfly
Messages : 62
Inscription : 19 Mai 2017 14:46

Re: [DB-AL] Jeu 2D - Tirer en direction de la souris

Message par Badfly » 27 Nov 2017 18:14

Ah parfait cela fonctionne je te remercie.

Pour le AddForce(), je ne met pas le velocity. Je met soit l'un soit l'autre.
Il faut associer les deux ?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Jeu 2D - Tirer en direction de la souris

Message par boubouk50 » 27 Nov 2017 18:32

Non justement.
La vélocité représente la trajectoire et la vitesse en cours du rigidbody. Les AddForce () ajoutent des forces qui viennent modifier la trajectoire et la vitesse en cours donc la vélocité.
Ajouter donc des forces puis contrôler la vélocité revient à ne pas tenir compte des forces, ou bien de modifier la trajectoire de façon non-physique ce qui n'a pas vraiment de sens dans la plupart des cas.
Ici, ta balle ne subit pas modification, tu lui donnes un départ et ensuite plus rien, donc tu peux directement modifier la vélocité, mais pour être strict, il faudrait tout gérer avec les AddForce ().

Si tu veux clore ce topic (parce que réponse trouvée), merci d'ajouter [RESOLU] au début du titre du premier post en l'éditant.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « (C#) CSharp »