Limiter les déplacements

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
devalnos
Messages : 17
Inscription : 13 Avr 2011 10:30

Limiter les déplacements

Message par devalnos » 01 Avr 2015 09:29

Bonjour,

Je suis en train de réaliser un petit Flappy_bird avec Unity pour me faire un peu la main, mais je n'arrive pas à "contrôler" les déplacements de mon personnage. Il va bien de gauche à droite automatiquement grâce à un "speed * Time.deltaTime;" et il va bien de bas en haut en appuyant sur "espace" grâce à un jeu de force. Le soucis c'est que si je mitraille la touche "espace", le personnage va s'élever relativement haut. Et à vrai dire, avec le nombre de tentative que j'ai faite je pense que mon petit Flappy doit aujourd'hui être familier avec Mars :D
Du coup ce qu'il faut c'est qu'il puisse toujours bouger et sauter, mais qu'il ne puisse sauter que jusqu'à un certain point.

J'ai regardé dans l'interface du rigidbody mais on ne peut freezer les rotations et les positions du personnage qu'au lancement, on ne peut pas le paramétrer pour qu'il en bloque une tout en lui laissant la possibilité de bouger. Du coup j'ai essayé dans le script mais mes... euh... "compétences" en javascript commencent à me faire défaut :oops:
Est-ce que vous auriez une idée de comment limiter les déplacements du personnage sur l'axe des Y, tout en laissant le choix dans l'onglet "inspector" de pouvoir modifier ces données?

Merci d'avance

Devalnos

PS1: J'utilise la version 4.3.1 de Unity
PS2: Voici le script du Flappy

Code : Tout sélectionner

var life: int;
var speed : float;
public var jumpForce : float;
static var score: int;

function Update () {
	transform.Translate(speed * Time.deltaTime, 0, 0, Space.World); //permet d'avancer sans appuyer sur une touche
	
	if (Input.GetKeyDown(KeyCode.Space)) {
					jump();
		}
		
	}
	
function jump() {
		rigidbody.AddForce(new Vector3(0, jumpForce, 0)); // Donne la force du saut
		
	}
function OnTriggerEnter (other : Collider){
		if(other.CompareTag("Mur")){
				life--;
				if (life<= 0) {
				Destroy(gameObject );
				Application.LoadLevel("Game_over");
				}
			}
		if(other.CompareTag("Trigger")){
				score ++;
				}
		}
	
function OnGUI () {
GUI.Label(Rect(0,20,100,100), "Pipe:" + score);
}

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

Re: Limiter les déplacements

Message par boubouk50 » 01 Avr 2015 09:49

Tu n'as qu'à regarder la position en Y de ton flappyBird quand tu appuies sur espace, s'il est supérieur au seuil alors tu ne fais pas le saut.
"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

devalnos
Messages : 17
Inscription : 13 Avr 2011 10:30

Re: Limiter les déplacements

Message par devalnos » 01 Avr 2015 10:03

Oui mais si le joueur mitraille la touche "espace" avant d'arriver dans cette zone de blocage, il subira malgré tout la force qu'il a déjà accumulé. Pareillement, si je l'empêche de sauter, rien ne l'empêchera de tomber en-dessous de l'écran. C'est pour ça qu'il faudrait bloquer la position du personnage en haut et en bas, sans que cela ne tienne compte des forces qui s'appliquent sur lui.

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

Re: Limiter les déplacements

Message par boubouk50 » 01 Avr 2015 10:20

Ah oui, je vois mieux...
Dans ce cas il faudrait pouvoir déterminer une force maximale en fonction de la hauteur de ton FlappyBird.
Ou bien chaque "saut" annule les forces exercées avant, mais ça peut faire bizarre.
En même temps si le joueur est un crétin et qu'il veut appuyer comme un malade, il est censé perdre, non? Au lieu de l'assister.
"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

devalnos
Messages : 17
Inscription : 13 Avr 2011 10:30

Re: Limiter les déplacements

Message par devalnos » 01 Avr 2015 10:40

Il ne perdra que s'il heurte une pipe techniquement. Et puis tous les joueurs essayent de voir ce qu'un jeu à dans le ventre habituellement :)

J'aime assez bien l'idée de ré-initialiser la force maximale en fonction de la position du Flappy. Vu que les forces se cumulent sur mon personnage mais que mon "jumpForce" reste inchangé, j'imagine qu'il y a un compteur de force interne à Unity, mais qui n'est pas visible. Est-ce qu'il est possible de l'appeler? Et si oui, comment?
Aussi, comment faire pour prendre la position du player dans le script? J'ai essayé avec "Y" mais il n'avait pas l'air de connaitre, et avec "Position.Y" mais ça ne lui a pas plu...

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

Re: Limiter les déplacements

Message par boubouk50 » 01 Avr 2015 11:01

Pour les transformations, il faut passer par le transform: ex MonGameObject.transform.position.y
Pour la partie AddForce, je n'ai que la théorie à force de parcourir le forum, je ne peux pas trop t'aider.
"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

devalnos
Messages : 17
Inscription : 13 Avr 2011 10:30

Re: Limiter les déplacements

Message par devalnos » 01 Avr 2015 11:18

Yep, j'ai trouvé pour la position finalement. À la place je vais faire un script qui va repousser le joueur avec une force négative s'il touche les bords, ça devrait aller avec ça.

Merci beaucoup pour ton aide :)

Verrouillé

Revenir vers « (Js) Javascript »