[JS] Problème lors du saut du personnage.

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
leogar
Messages : 24
Inscription : 31 Mai 2012 15:35

[JS] Problème lors du saut du personnage.

Message par leogar » 26 Oct 2013 21:04

Bonjour, je me suis lancé dans le script de déplacement de mon personnage, tout marche excepté le saut qui est "brutal".
Je m'explique : lorsque je saute, mon personnage a plutôt l'air téléporté vers le haut que de sauter, pareil lorsqu'il redescend.
J'utilise un rigidbody et modifier la masse de l'objet ne change rien.

Code : Tout sélectionner

#pragma strict

var vitesseMouvement : int = 2;
var jump : int = 25;
var jumpenable : boolean = true;

function Update () {

if (Input.GetKey("z")) {
transform.position += transform.forward * vitesseMouvement * Time.deltaTime;
}

else if (Input.GetKey("s")) {
transform.position -= transform.forward * vitesseMouvement * Time.deltaTime;
}

else if (Input.GetKey("q")) {
transform.position -= Vector3.right * vitesseMouvement * Time.deltaTime;
}

else if (Input.GetKey("d")) {
transform.position += Vector3.right * vitesseMouvement * Time.deltaTime;
}

if(jumpenable == true) {
if(Input.GetKeyDown(KeyCode.Space))
{
transform.position += Vector3.up * jump * Time.deltaTime; 
}
}
else if(jumpenable == false) {}

}

function OnCollisionEnter (col : Collision) {

var jumpenable = true;

}

function OnCollisionExit (col : Collision) {

var jumpenable = false;

}
Merci de votre aide.

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: [JS] Problème lors du saut du personnage.

Message par artemisart » 26 Oct 2013 21:26

Il ne faut pas modifier la position ou translate quand tu as un rigidbody.
Change plutôt la vélocité ou ajoute des forces (regarde la doc quoi).

leogar
Messages : 24
Inscription : 31 Mai 2012 15:35

Re: [JS] Problème lors du saut du personnage.

Message par leogar » 26 Oct 2013 22:28

D'accords, je vais jeter un œil merci.

leogar
Messages : 24
Inscription : 31 Mai 2012 15:35

Re: [JS] Problème lors du saut du personnage.

Message par leogar » 26 Oct 2013 23:33

Merci ! ça fonctionne.
Par contre j'ai désormais un problème : afin de ne pas pouvoir sauter à l'infini j'ai mis la condition

Code : Tout sélectionner

if(rigidbody.velocity.y == 0){}
(en changeant le == par un <= il est toujours possible de faire des doubles sauts)
Mais il y a toujours un délai d'environ deux secondes entre chaque saut avec cette condition.

Avatar de l’utilisateur
mineos
Messages : 121
Inscription : 19 Oct 2013 12:27
Localisation : Spain Alicante

Re: [JS] Problème lors du saut du personnage.

Message par mineos » 28 Oct 2013 02:05

C'est peut être pas la bonne solution mais :

js:

Code : Tout sélectionner


var saut : boolean = true;

function Update () {

	if(Input.GetKeyDown(KeyCode.Space)) {
		
		if(saut) {
		
			rigidbody.AddForce(Vector3.up * 250);
			saut = false;
			
		}

	}

}

function OnCollisionEnter(obj : Collision){

	if(obj.transform.tag == "Sol"){
	
		saut = true;
	
	}

}
c#
using UnityEngine;
using System.Collections;

public class Deplacement : MonoBehaviour
{

public bool saut = true;


void Update () {

if(Input.GetKeyDown(KeyCode.Space)) {

if(saut) {

rigidbody.AddForce(Vector3.up * 250);
saut = false;

}

}

}

voidOnCollisionEnter(Collision obj){

if(obj.transform.tag == "Sol"){

saut = true;

}
}
}
Ajouter un boolean que tu switch a chaque fois... le problème c'est que quand tu arrive sur un objet avec un tag différent de "Sol" tu saute pas xD
Cordialement
MINéOS

Avatar de l’utilisateur
Solup
Messages : 249
Inscription : 20 Mars 2013 18:41
Localisation : Toulouse (31)

Re: [JS] Problème lors du saut du personnage.

Message par Solup » 28 Oct 2013 10:57

Pour empêcher le personnage de sauter quand il est en l'air, utilise isGrounded :
http://docs.unity3d.com/Documentation/S ... ounded.htm

leogar
Messages : 24
Inscription : 31 Mai 2012 15:35

Re: [JS] Problème lors du saut du personnage.

Message par leogar » 02 Nov 2013 14:29

Merci je n'avais pas pensé au "isGrounded" dès que je reviens sur mon ordi avec mon projet je testerai cela.
(J'ai aussi un problème qui pour le moment reste un détail, lorsque mon personnage tourne (transform.Rotate) la direction vers laquelle il avance reste la même, en somme il n'y a quela caméra qui tourne)
Merci à vous.

hugandhug
Messages : 20
Inscription : 01 Nov 2013 19:31

Re: [JS] Problème lors du saut du personnage.

Message par hugandhug » 02 Nov 2013 16:31

Ton personnage est une capsule car si oui tu as peut etre l impression qu elle ne tourne pas et que donc si tu dis qu elle avance dans la même direction qu avant ca veut dire que tes axes sont global mais je ne sais pas comment changer les types d axes
hugandhug
Blender+Unity=Melange parfait gratuit :D

Avatar de l’utilisateur
mineos
Messages : 121
Inscription : 19 Oct 2013 12:27
Localisation : Spain Alicante

Re: [JS] Problème lors du saut du personnage.

Message par mineos » 02 Nov 2013 20:56

Solup a écrit :Pour empêcher le personnage de sauter quand il est en l'air, utilise isGrounded :
http://docs.unity3d.com/Documentation/S ... ounded.htm
Petite question par ci par la, isGrounded n'est pas seulement utilisable quant on utilise la class CharacterMotor?
leogar a écrit :Merci je n'avais pas pensé au "isGrounded" dès que je reviens sur mon ordi avec mon projet je testerai cela.
(J'ai aussi un problème qui pour le moment reste un détail, lorsque mon personnage tourne (transform.Rotate) la direction vers laquelle il avance reste la même, en somme il n'y a quela caméra qui tourne)
Merci à vous.
peux tu montrer ton code de déplacement et celui de rotation.
Cordialement
MINéOS

leogar
Messages : 24
Inscription : 31 Mai 2012 15:35

Re: [JS] Problème lors du saut du personnage.

Message par leogar » 03 Nov 2013 00:14

Bien sûr, j'enverrai le code exact (si il y a erreur) quand j'aurai mon ordi sous la main mais si je me souviens bien c'est cela :

Code : Tout sélectionner

if(input.getKey("z")) {
transform.position += Vector3.forward * vitesseMouvement * Time.deltaTime;
}
if(input.getKey("q")) {
transform.Rotate(0, 2, 0);
}

Répondre

Revenir vers « Scripting »