[RESOLU] Script de déplacement

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
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
CreamyDelux
Messages : 36
Inscription : 01 Mars 2016 19:44

[RESOLU] Script de déplacement

Message par CreamyDelux » 07 Avr 2016 09:42

Bonjour à tous,
Dans mon projet actuel, qui est un jeu de plate-forme 3D, j'ai créer une balle qui représente le joueur. J'ai fait un script pour les déplacements avant, arrière et latéraux, jusque la pas de problème, seulement je me rends compte que j'ai oublié de mettre la possibilité de sauter. J'ai refait mon script et la balle saute lorsque j'appuie sur ESPACE.

Voila le problème : Après avoir testé le script en jeu, je me confronte a deux problèmes que je n'arrive pas a régler pour le moment.
Le premier : Si j'appuie 3 fois d'affilé, le balle va faire 3 saut consécutif, ce que je ne veut pas, 1 seul saut doit être possible jusqu'au moment ou la balle touche le sol.

Le deuxième : Quand je suis a l'arrêt, la hauteur de mon saut me parait bonne, seulement des que je me déplace et que je saute en meme temps j'ai l'impression que la force du saut est décuplée. Comme si les valeurs de déplacement se melles aux valeurs de saut.

J'ai appliqué ce script sur ma balle :

Code : Tout sélectionner

var vitesseDeplacement = 5.0;
var vitesseSaut : float = 1000;

function Update () {

	if(Input.GetButtonDown("Space")){
       rigidbody.AddForce(0, vitesseSaut * Time.deltaTime, 0);
}
	else if(Input){
	rigidbody.AddForce(0,0, Input.GetAxis("Vertical") * 10 * vitesseDeplacement * Time.deltaTime);
	rigidbody.AddForce(Input.GetAxis("Horizontal") * 10 * vitesseDeplacement * Time.deltaTime, 0, 0);

}	
	else{
	rigidbody.AddForce(0, 0, 0);
}
}
Merci d'avance
CreamyDelux
Dernière édition par CreamyDelux le 09 Mai 2016 18:09, édité 1 fois.

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

Re: Script de déplacement

Message par boubouk50 » 07 Avr 2016 09:54

Code : Tout sélectionner

if(Input.GetButtonDown("Space")){
       rigidbody.AddForce(0, vitesseSaut * Time.deltaTime, 0);
}
Si ta force est dépendante du deltaTime (qui varie) alors ton saut n'aura jamais une hauteur constante.

Code : Tout sélectionner

 else{
   rigidbody.AddForce(0, 0, 0);
}
A quoi ça te sert de ne pas ajouter de force?

Pour le double/triple saut cherche sur le forum isGrounded ou bien sur Google. Tu auras mille réponses.
"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

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Script de déplacement

Message par Moi 1971 » 07 Avr 2016 09:54

Bonjour,
Sujet déjà traité plein de fois ici. Tu trouveras plein de solutions en recherchant dans les anciens sujets.
Pour résumer:
Pour le saut, il faut créer un Booléen "toucheLeSol" qui sera à vrai quand le perso marche et qui passera à faut dés que tu appuis sur la barre d'espace. En conditionnant le saut pas l’appui sur la barre d'espace et le booléen "toucheLeSol" à vrai tu éviteras le multi-saut.
Pour le deuxième problème il faut "normaliser" ton vecteur de déplacement et aussi le construire en deux fois avant de l'utiliser en une seule fois dans le AddForce()....

CreamyDelux
Messages : 36
Inscription : 01 Mars 2016 19:44

Re: Script de déplacement

Message par CreamyDelux » 07 Avr 2016 16:41

Alors, pour te répondre boubouk50. Je pensait que le fait de ne pas ajouter de force aller m'assurer l'immobilité de la balle si l'on ne touche à rien. Du coup je l'ai enlevé.

J'ai réglé le problème de hauteur en enlevant le time.deltaTime
Et j'ai aussi réglé le problème de multi saut comme m'a expliqué Moi 197.

J'ai toujours le probleme qui fait que ma balle s'accélère lorsque j'avance et que je saute en meme temps, elle saute pas très haut, a la hauteur que je veut mais parcours presque le 1/3 du niveau. J'imagine que je doit régler sa d'après cette explication
Moi 1971 a écrit : Pour le deuxième problème il faut "normaliser" ton vecteur de déplacement et aussi le construire en deux fois avant de l'utiliser en une seule fois dans le AddForce()....
Je ne comprends pas ce que tu veut dire par normaliser mon vecteur

Merci de vos réponses

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

Re: Script de déplacement

Message par boubouk50 » 07 Avr 2016 16:57

Il faut border ta vélocité pour limiter ta vitesse max sur l'axe de la course.
Pour le saut, si ta balle flotte trop, tu peux jouer sur la gravité du monde.
"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

CreamyDelux
Messages : 36
Inscription : 01 Mars 2016 19:44

Re: Script de déplacement

Message par CreamyDelux » 04 Mai 2016 14:03

Bonjour,

Désolé sa fesait un petit moment que je n'étais pas venu sur le forum. J'ai eu beaucoup à faire en ce moment.
J'ai quand meme eu le temps de continuer mon projet.

J'ai réussi a régler le problème du multisaut, et aussi le problème de vélocité comme Boubouk m'a expliqué.

Néanmoins, il me reste encore un problème toujours par rapport au saut.
Je suis sur un jeu de plate-forme et le fond de mon jeux est l'eau. En effet, quand le joueur déborde du plateau de jeux, il tombe dans l'eau. Une fois qu'il tombe, je relance la scene.

Quand je saute et retombe sur le sol, pas de soucis je peut sauter 1 seule fois et juste si je touche le sol.
En revanche, quand je tombe dans l'eau et que la scene se relance, je ne peut plus sauter du tout.

Merci de vos réponses
CreamyDelux

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

Re: Script de déplacement

Message par boubouk50 » 04 Mai 2016 14:11

Si tu relances la scène, alors tout ce qu'il y a dedans devrait se réinitialiser.
Seuls les objets avec DontDestroyOnLoad () resteront présents. Si tu en as, ils faut les réinitialiser.
Aussi, si tu gères des affectations avec des données externes (playerPrefs par ex) il ne faut pas oublier de les réinitialiser ou de les modifier avant de relancer le monde.
"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

CreamyDelux
Messages : 36
Inscription : 01 Mars 2016 19:44

Re: Script de déplacement

Message par CreamyDelux » 04 Mai 2016 16:30

Je n'ai pas d'objet avec DontDestroyOnLoad(), donc je peut deja éliminer sa.
Et je n'ai pas encore créé le système de sauvegarde donc je n'ai pas non plus de soucis avec les player pref par exemple.

J'ai fait en sorte que le joueur saute quand il appuie sur espace ou entrer. Ma variable que j'ai appelé IsGrounded devienne false. Et cette variable devient true lorsqu'elle touche le sol.

J'ai aussi fait en sorte que IsGrounded devient true quand le joueur tombe dans l'eau ( j'ai place un objet invisible juste au dessous de l'eau pour cela )

Ma console prends bien en compte tout sa. Mais lorsque la scene se relance, IsGrounded = true, quand j'appuie sur Entrer par exemple il me dit IsGrounded = false mais il ne saute pas pour autant.

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

Re: Script de déplacement

Message par boubouk50 » 04 Mai 2016 16:35

Mets quelque Debug.Log dans ton code au niveau du saut pour voir si les contrôles n'ont pas sauté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

CreamyDelux
Messages : 36
Inscription : 01 Mars 2016 19:44

Re: Script de déplacement

Message par CreamyDelux » 04 Mai 2016 16:50

J'ai mit un debug log, après la AddForce qui me permet de sauter.
Un autre au moment ou IsGrounded = true
Et un autre au moment ou IsGrounded = false

IsGrounded s'affiche dans tout les situation avec la bonne valeur, il est true quand je lui dit et il est false quand je lui dit aussi. Donc la pas de soucis.

En revanche, au premier lancement de la scene, lorsque je saute la console m'affiche IsGrounded = false et "Vous sautez".
Je tombe dans l'eau la scene se relance. La console m'affiche IsGrounded = true et lorsque je veut sauter, je ne saute pas et la console affiche juste IsGrounded = false

Voici le code qui me permet de sauter :

Code : Tout sélectionner

function Update () {

	if(Input.GetButtonDown("Submit") && IsGrounded.IsGrounded == true && timerScript.tempsUp == false){
    GetComponent.<Rigidbody>().AddForce(0, vitesseDeplacement * 8, 0);
    print("Vous sautez");
   }
Et le code qui me permet de gérer le multi-saut :

Code : Tout sélectionner

var objetSol : GameObject;      // C'est l'objet qui va percuter l'objet où est ce Script
static var IsGrounded : boolean = true;

function Start(){
	IsGrounded = true;
}

function OnTriggerEnter(objetSol : Collider){

	if(objetSol.gameObject.tag == "Player"){
	IsGrounded = true;
	print ("IsGrounded = true");
}
}

function Update(){

	if(Input.GetButtonDown("Submit")){
	IsGrounded = false;
	print ("IsGrounded = false");
}
}

Verrouillé

Revenir vers « (Js) Javascript »