[DB-AL] Lancement d'objet

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
naru7410
Messages : 1
Inscription : 17 Sep 2017 11:31

[DB-AL] Lancement d'objet

Message par naru7410 » 17 Sep 2017 16:12

Bonjour;

j'ai créé une scène 2D mettant en place un simple personnage lanceur de hache, il lance correctement vers la droite, la gauche, et quand je suis à l'arrêt il lance uniquement vers la droite, hors je souhaiterai que quand il se stop en regardant vers la gauche il envoie sa hache vers la gauche.

Code : Tout sélectionner

void lance()
    {
        float h = Input.GetAxis("Horizontal");
        float p = h;

        axe = Instantiate(prefabAxe, transform.position, Quaternion.identity) as GameObject;
        Debug.Log(p);
        



       // if (p==0 || h>0) axe.GetComponent<Rigidbody2D>().AddForce(transform.TransformDirection(Vector2.right * speed));
        if (p<0 || h<0) axe.GetComponent<Rigidbody2D>().AddForce(transform.TransformDirection(Vector2.left * speed));
        if (p==0 || h==0) axe.GetComponent<Rigidbody2D>().AddForce(transform.TransformDirection(Vector2.right * speed));
        if (p>0 || h>0) axe.GetComponent<Rigidbody2D>().AddForce(transform.TransformDirection(Vector2.right * speed));

    }
Je pense effectivement que la var "p" est inutile mais je pensais arriver à conserver la valeur négative à l'intérieur :(
J'ai placé ma coroutine dans le void Update.
D'avance merci.

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

Re: [DB-AL] Lancement d'objet

Message par boubouk50 » 18 Sep 2017 10:38

Salut,
Ne peux-tu pas simplement lancer la hache en fonction de l'orientation de ton personnage? Si lui est bon alors, ça ne devrait pas poser de problème.
Sinon, tu devrais pas directement utiliser l'Input comme test. Mais plutôt une variable qui enregistre le dernier vecteur de direction. Ainsi lorsque l'Input vaut 0 alors tu tires dans la dernière direction enregistrée. Ici, ta condition l'envoie tout le temps vers la droite, et ce n’est pas ce que tu veux.
"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

Avatar de l’utilisateur
evereal
Messages : 109
Inscription : 06 Nov 2015 18:46

Re: [DB-AL] Lancement d'objet

Message par evereal » 18 Sep 2017 11:56

Hello,

Manque la partie de ton code pour le déplacement...

Je vais essayé de faire sans :

Code : Tout sélectionner

Bool fireDirection = true; //true = droite, false = gauche

void Update() {
	float h = Input.GetAxis("Horizontal");
	//si h positif, on tire a droite
	//sinon si h négatif, on tire à gauche
	//sinon garde la dernière direction en ne fesant rien
	if (h > 0)
		fireDirection = true;
	else if (h < 0)
		fireDirection = false;
	
	// déplacement
	transform.position ...
}

void lance() {
	axe = Instantiate(prefabAxe, transform.position, Quaternion.identity) as GameObject;

	if (fireDirection) 
		axe.GetComponent<Rigidbody2D>().AddForce(transform.TransformDirection(Vector2.right * speed));
	else
		axe.GetComponent<Rigidbody2D>().AddForce(transform.TransformDirection(Vector2.left * speed));

}
“La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !”

Répondre

Revenir vers « (C#) CSharp »