[Résolu]Problème de gravité avec CharacterController

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
Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [Résolu]Problème de gravité avec CharacterController

Message par Moi 1971 » 29 Sep 2015 19:58

Ce que j'ai expliqué, comme tu le dis, c'est la physique réelle. Je n'ai pas dit d'utiliser l'accélération ni la vitesse pour déplacer un personnage. C'est bien une force qu'il faut utiliser.

Pjarcos78
Messages : 48
Inscription : 06 Jan 2015 19:33

Re: [Résolu]Problème de gravité avec CharacterController

Message par Pjarcos78 » 02 Oct 2015 19:09

Bonjour,
Tout d'abord merci pour toutes ces réponses et désolé de répondre si tard car j'ai du faire beaucoup de tests qui m'ont pris du temps.
J'ai cependant certain problèmes:
Titan a écrit :
Pjarcos78 a écrit :
@RLG a écrit :Juste pour comprendre, pourquoi avoir une gravité de 40 ? Normalement elle est à 9.81 non?
Pourquoi à 40, tout simplement parce que si je mets une gravité plus basse le personnage saute dans les pentes lorsqu'il descend.
J'avoue ne pas savoir comment appliquer ce déplacement :?
De plus, je ne comprend pas tout à fait pourquoi appliquer un mouvement perpendiculaire à la normale car si je fait ainsi, logiquement je devrai remonter la pente que j'essaie de descendre :0
Iwa a écrit :
Pjarcos78 a écrit : 2_une force progressive jumpSpeed est appliquée au personnage (c'est ici que j'ai un problème c 'est pour que la force soit progressive)
Je sais pas si ça résoudra ton soucis mais du coup pour ton soucis courant tu pourrais utilisé un Mathf.Lerp :)

http://docs.unity3d.com/ScriptReference/Mathf.Lerp.html

Ca permet de modifier une valeur progressivement jusqu'à ce qu'elle atteigne son seuil :)
C'est là dessus que j'ai fait pas mal de tests et qui ne sont finalement pas très concluants, je n'arrive pas à ce que la vitesse appliqué grâce à

Code : Tout sélectionner

moveDirection.y = Mathf.Lerp(0,jumpSpeed,Time.time);
soit réellement progressive car elle m'apparait comme aussi rapide que si je mettait simplement "= jumpSpeed" ; je pense donc que c'est à cause de t (ici: Time.time) qui doit être trop rapide pour arriver à 1 mais je ne sais pas comment le ralentir - une idée ? -
Titan a écrit :Effectivement, Perpendiculaire à la normal. Par contre je maintient ce que j'ai dis pour l'applicaiton des forces dans un simulateur physique.
Ce que tu dit n'est pas faut d'un point de vue stictement physique mais ça risque pas d'aider l'OP beaucoup, je serais curieux de voir ton implémentation si elle différe:

Code : Tout sélectionner

CharacterController controller = GetComponent<CharacterController>();
Vector3 speed = Vector3.zero;
float moveForce = 10.0f;
float jumpSpeed = 10.0f;
float fallMaxSpeed = 10.0f;
float moveMaxSpeed = 2.0f;


void FixedUpdate()
{
   speed += GetAcceleration();
   if (Input.GetKey(KeyCode.Space) && !controller.IsGrounded)
      speed.y = jumpSpeed;
   speed = ClampSpeed(); 
   controller.Move(speed);
}

// définir la vitesse maximum de chute et de course
Vector3 ClampSpeed(Vector3  speed)
{
   speed.z = Mathf.Clamp(speed.z, -moveMaxSpeed , moveMaxSpeed);
   speed.y = Mathf.Clamp(speed.y, -fallMaxSpeed , float.MaxValue);
}

// Acceleration = somme des forces
Vector3 GetAcceleration()
{
   Vector3 output = Vector3.zero;
   if (controller.IsGrounded)
   {
      // à modifier avec la perpendiculaire à la normale
      Vector3 output += Vector3(0,0,Input.GetAxis("Vertical") * moveForce);
   }
   else
   {
      Vector3 output += Vector3(0, -gravity, 0);
   }
   return output ;
}
On remarquera le saut, qui modifie directement la vitesse plutot que de passer par une acceleration ainsi que la limitiation de vitesse, qui ne correspondent à rien de physique mais qui sont toujours présent dans les controles de jeu video.
On voit bien apparaitre force => vitesse => position
Là par contre je n'ai pas fait de test du tout car je n'ai pas bien -voir pas du tout- compris le code (en plus de coder en javascript, je suis encore un trop gros débutant pour comprendre les fonctions utilisé ici :? ).

Cependant tout n'est pas perdu car j'ai fini par remettre la gravité à 9.81 sous vos conseil et tout fonctionne pour les pentes (il y a juste un léger tremblement mais j'ai aussi dissocier la caméra du personnage et on ne le remarque plus).

J'espère avoir été clair et je suis désolé de vous importuner par mon statut de débutant,
Encore merci pour vos réponses,
Pjarcos78

Pjarcos78
Messages : 48
Inscription : 06 Jan 2015 19:33

Re: [Résolu]Problème de gravité avec CharacterController

Message par Pjarcos78 » 03 Oct 2015 16:01

Bonjour,
En faisant des recherches sur internet et beaucoup de test j'ai fini par régler mon problème, je ne pense pas que ce soit la meilleure solution mais je n'ai pas trouvé mieux :

Code : Tout sélectionner

var jumpSpeed:float;
var smooth:float;
var jumpTime:float;

private var jump:boolean;
private var currentTime:float;
[...]
//Saut 
if(Input.GetKeyDown(KeyCode.Space)){
	jump = true;
	currentTime = Global.fixedTime;
}	
if(currentTime + jumpTime < Global.fixedTime){
	jump = false;
}
if(jump){
	moveDirection.y = Mathf.Lerp(0,jumpSpeed,Global.deltaTime * smooth);
}
Le mouvement est donc plutôt fluide et je pourrais mettre toute ces lignes de codes dans une fonction pour que ce soit plus lisible.
Dites-moi ce que vous en pensez,
Pjarcos78

Verrouillé

Revenir vers « (Js) Javascript »