[RÉSOLU][MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
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
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
-
- Messages : 52
- Inscription : 17 Août 2014 01:46
Re: [MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Du coup, faudrait que je mette le trigger sur un autre script ? Pas forcément lié au joueur ?
Re: [MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Déplacer le code ne devrait pas être ton soucis pour le moment. Tu feras ça à la fin pour l’optimisation.
Ton problème c'est d'adapter ton code actuel. Le code est bon dans le sens où il n'y a pas de Bug. Mais fonctionnellement il ne fait pas ce que tu attends. Tu dois te poser la question de comment faire pour rajouter au code actuel la possibilité au personnage d'être propulsé sans nuire au fonctionnement du reste.
Sans vouloir te donner une solution, il y a deux approches. Soit tu adaptes les valeurs de y pour te rapprocher d'un fonctionnement correct, soit tu changes le code lui même. La première approche est la plus facile, commence par ça. Tu peux tester de remplacer la valeur "30" par "1000 f", comme pour Z (n'oublies pas le f, c'est un float) pour voir ce que ça donne. parce que si cela se trouve ça peut donner quelque chose de pas trop mal. C'est ce qu'a vu Max au début de ce poste.
Ton problème c'est d'adapter ton code actuel. Le code est bon dans le sens où il n'y a pas de Bug. Mais fonctionnellement il ne fait pas ce que tu attends. Tu dois te poser la question de comment faire pour rajouter au code actuel la possibilité au personnage d'être propulsé sans nuire au fonctionnement du reste.
Sans vouloir te donner une solution, il y a deux approches. Soit tu adaptes les valeurs de y pour te rapprocher d'un fonctionnement correct, soit tu changes le code lui même. La première approche est la plus facile, commence par ça. Tu peux tester de remplacer la valeur "30" par "1000 f", comme pour Z (n'oublies pas le f, c'est un float) pour voir ce que ça donne. parce que si cela se trouve ça peut donner quelque chose de pas trop mal. C'est ce qu'a vu Max au début de ce poste.
-
- Messages : 52
- Inscription : 17 Août 2014 01:46
Re: [MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Alors, en mettant, dans mon trigger, "moveDirection.y = 1000f;", le player n'est pas encore redescendu...
Il monte jusqu'à une position y à un peu plus de 24 000 puis redescend.
Il monte jusqu'à une position y à un peu plus de 24 000 puis redescend.
Re: [MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Donc le problème n'est pas lié à l'axe y mais bien à l'axe z. Dans ton Update() le déplacement sur z est lié à Input.GetAxis("Vertical");
Est-ce que tu appuis sur la touche pour avancer pendant le saut?
Tu peux faire un debug de la valeur de speedZ pour suivre son évolution au cours du temps et ainsi comprendre ce qui se passe.
Est-ce que tu appuis sur la touche pour avancer pendant le saut?
Tu peux faire un debug de la valeur de speedZ pour suivre son évolution au cours du temps et ainsi comprendre ce qui se passe.
-
- Messages : 52
- Inscription : 17 Août 2014 01:46
Re: [MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Code : Tout sélectionner
Dans le Update, speedZ = 0
Dans le Update, speedZ = 0
Dans le Update, speedZ = 15
Dans le Update, speedZ = 15
Dans le Update, speedZ = 14,16617
Dans le Update, speedZ = 13,91974
Dans le Update, speedZ = 13,64887
Dans le Update, speedZ = 13,21765
Dans le Update, speedZ = 12,88105
Dans le Update, speedZ = 12,56306
Dans le Update, speedZ = 12,07262
Dans le Update, speedZ = 11,75422
Dans le Update, speedZ = 11,28324
Dans le Update, speedZ = 10,9765
Dans le Update, speedZ = 10,51476
Dans le Update, speedZ = 10,28885
Dans le Update, speedZ = 9,957096
Dans le Update, speedZ = 9,702163
Dans le Update, speedZ = 9,521896
Dans le Update, speedZ = 9,31073[..]
Dans le Update, speedZ = 14,94995
Dans le Update, speedZ = 15
Dans le Update, speedZ = 15
Dans le Update, speedZ = 15
Dans le Update, speedZ = 15
Dans le Update, speedZ = 15
Dans le Update, speedZ = 15
Dans le Update, speedZ = 15
Dans le Update, speedZ = 15
Dans le Update, speedZ = 15[..]
Dans le Update, speedZ = 15
Dans le Update, speedZ = 15
Dans le Trigger, moveDirection.y équivaut à la valeur 30
Dans le Update, speedZ = 15
Dans le Update, speedZ = 15
Oui et speedZ égal 15 si je bouge pendant le saut"Est-ce que tu appuis sur la touche pour avancer pendant le saut?"
Re: [MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Et donc ? Ton personnage avance mais il n'est pas propulsé, c'est ça?
Il y a bien dans le trigger "moveDirection.z = 1000f; " et ça n’apparaît pas les log du debug. C'est ça?
A mon avis, encore une fois, la valeur 1000 est écrasée par la valeur 15 quelques milliseconde après, ça n'a pas le temps d’apparaître dans les log parce que ton Debug est en fin de Update..
Il faut rajouter des debug :
Un au début de l'Update et un à la fin de l'update
Un au début du trigger et un à la fin
ça doit en faire 4 et donner ce genre de résultat dans les logs :
1 = Début Update, speedZ = 15
2 = Fin le Update, speedZ = 15
3 = Début Trigger, speedZ = 15
4 = Fin Trigger, speedZ = 1000
1 = Début Update, speedZ = 1000
2 = Fin le Update, speedZ = 15
1 = Début Update, speedZ = 15
2 = Fin le Update, speedZ = 15
...
..
.
Il y a bien dans le trigger "moveDirection.z = 1000f; " et ça n’apparaît pas les log du debug. C'est ça?
A mon avis, encore une fois, la valeur 1000 est écrasée par la valeur 15 quelques milliseconde après, ça n'a pas le temps d’apparaître dans les log parce que ton Debug est en fin de Update..
Il faut rajouter des debug :
Un au début de l'Update et un à la fin de l'update
Un au début du trigger et un à la fin
ça doit en faire 4 et donner ce genre de résultat dans les logs :
1 = Début Update, speedZ = 15
2 = Fin le Update, speedZ = 15
3 = Début Trigger, speedZ = 15
4 = Fin Trigger, speedZ = 1000
1 = Début Update, speedZ = 1000
2 = Fin le Update, speedZ = 15
1 = Début Update, speedZ = 15
2 = Fin le Update, speedZ = 15
...
..
.
-
- Messages : 52
- Inscription : 17 Août 2014 01:46
Re: [MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Le but n'est pas que je puisse bouger le player quand il saute mais, oui, qu'il soit propulsé au contact du Trigger
Le speedZ n'est pas reconnu dans le trigger du coup je ai du le déclarer, avant le Start, en public
"Assets\Script\PlayerMouvement.cs(161,57): error CS0103: The name 'speedY' does not exist in the current context"
Voila ou j'ai placé les debug :
Dans l'update :
-début :
-fin :
-Dans le trigger :
Résultats :
Dans le trigger :
Fin de l'Update, speedZ = 9,083139
Debut du Trigger, speedZ vaut 0
Fin du Trigger, speedZ vaut 0
Debut de l'Update, speedZ = 0,5914897
Concernant l'Upate, plusieurs valeurs différentes :
Debut de l'Update, speedZ = 0
Fin de l'Update, speedZ = 0
Ensuite différentes valeurs se succédent ::
Fin de l'Update, speedZ = 0
Debut de l'Update, speedZ = 0,0330657
Fin de l'Update, speedZ = 0,4959855
Debut de l'Update, speedZ = 0,0533466
Fin de l'Update, speedZ = 0,800199...
et se stabilite à 1 et 15 :
Fin de l'Update, speedZ = 14,69793
Debut de l'Update, speedZ = 0,9960237
Fin de l'Update, speedZ = 14,94036
Debut de l'Update, speedZ = 1
Fin de l'Update, speedZ = 15
Debut de l'Update, speedZ = 1
Fin de l'Update, speedZ = 15
puis, a nouveau des valeurs :
Debut de l'Update, speedZ = 1
Fin de l'Update, speedZ = 15
Debut de l'Update, speedZ = 0,9464671
Fin de l'Update, speedZ = 14,19701
Debut de l'Update, speedZ = 0,9295534
Fin de l'Update, speedZ = 13,9433
Debut de l'Update, speedZ = 0,9152917
Fin de l'Update, speedZ = 13,72937
pour finir à 0 :
Debut de l'Update, speedZ = 0,008919737
Fin de l'Update, speedZ = 0,1337961
Debut de l'Update, speedZ = 0
Fin de l'Update, speedZ = 0
Debut de l'Update, speedZ = 0
j'ai fait au mieux pour les résultats
Le speedZ n'est pas reconnu dans le trigger du coup je ai du le déclarer, avant le Start, en public
"Assets\Script\PlayerMouvement.cs(161,57): error CS0103: The name 'speedY' does not exist in the current context"
Voila ou j'ai placé les debug :
Dans l'update :
-début :
Code : Tout sélectionner
void Update()
{
//Calcule les directions
//forward = avant/arrière
//right = droite/gauche
Vector3 forward = transform.TransformDirection(Vector3.forward);
Vector3 right = transform.TransformDirection(Vector3.right);
//Est-ce qu'on appuie sur un bouton de direction ?
// Z = axe arrière/avant
float speedZ = Input.GetAxis("Vertical");
// X = axe gauche/droite
float speedX = Input.GetAxis("Horizontal");
// Y = axe haut/bas
float speedY = moveDirection.y;
Debug.Log("Debut de l'Update, speedZ = " + speedZ);
Code : Tout sélectionner
//Applique la rotation haut/bas sur la caméra
playerCamera.transform.localRotation = Quaternion.Euler(rotationX, 0, 0);
//Input.GetAxis("Mouse X") = mouvement de la souris gauche/droite
//Applique la rotation gauche/droite sur le Player
transform.rotation *= Quaternion.Euler(0, Input.GetAxis("Mouse X") * rotationSpeed, 0);
//Debug.Log("Dans le Update, moveDirection.x équivaut à la valeur "+moveDirection.x);
Debug.Log("Fin de l'Update, speedZ = " + speedZ);
}
Code : Tout sélectionner
private void OnTriggerEnter(Collider other)
{
if (other.name == "Cube")
{
Debug.Log("Debut du Trigger, speedZ vaut " + speedZ);
moveDirection.y = 20f;
moveDirection.z = 1000f;
characterController.Move(moveDirection *Time.deltaTime);
Debug.Log("Fin du Trigger, speedZ vaut " + speedZ);
}
}
Dans le trigger :
Fin de l'Update, speedZ = 9,083139
Debut du Trigger, speedZ vaut 0
Fin du Trigger, speedZ vaut 0
Debut de l'Update, speedZ = 0,5914897
Concernant l'Upate, plusieurs valeurs différentes :
Debut de l'Update, speedZ = 0
Fin de l'Update, speedZ = 0
Ensuite différentes valeurs se succédent ::
Fin de l'Update, speedZ = 0
Debut de l'Update, speedZ = 0,0330657
Fin de l'Update, speedZ = 0,4959855
Debut de l'Update, speedZ = 0,0533466
Fin de l'Update, speedZ = 0,800199...
et se stabilite à 1 et 15 :
Fin de l'Update, speedZ = 14,69793
Debut de l'Update, speedZ = 0,9960237
Fin de l'Update, speedZ = 14,94036
Debut de l'Update, speedZ = 1
Fin de l'Update, speedZ = 15
Debut de l'Update, speedZ = 1
Fin de l'Update, speedZ = 15
puis, a nouveau des valeurs :
Debut de l'Update, speedZ = 1
Fin de l'Update, speedZ = 15
Debut de l'Update, speedZ = 0,9464671
Fin de l'Update, speedZ = 14,19701
Debut de l'Update, speedZ = 0,9295534
Fin de l'Update, speedZ = 13,9433
Debut de l'Update, speedZ = 0,9152917
Fin de l'Update, speedZ = 13,72937
pour finir à 0 :
Debut de l'Update, speedZ = 0,008919737
Fin de l'Update, speedZ = 0,1337961
Debut de l'Update, speedZ = 0
Fin de l'Update, speedZ = 0
Debut de l'Update, speedZ = 0
j'ai fait au mieux pour les résultats
Re: [MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Mince.. désolé j'ai fait une erreur en faisant un copier/coller. Ce n'était pas "speedZ" qu'il fallait débuguer mais "moveDirection.z" !!
Il faut remettre la déclaration de speedZ comme avant et changer tous les speedZ par "moveDirection.z" dans les debug.
Le but est de comprendre l'évolution de la valeur de la variable "moveDirection.z" au cours du temps et de voir combien de temps elle conserve la valeur 1000f et où elle la perd.
Et met 1 = ,2 = ,3 = et 4 = en début de débug, c'est plus lisible que "début de..."
======
1 = Début Update, moveDirection.z = 15
2 = Fin le Update, moveDirection.z = 15
3 = Début Trigger, moveDirection.z = 15
4 = Fin Trigger, moveDirection.z = 1000
1 = Début Update, moveDirection.z = 1000
2 = Fin le Update, moveDirection.z = 15
1 = Début Update, moveDirection.z = 15
2 = Fin le Update, moveDirection.z = 15
...
comme ça dans la liste des log c'est plus simple de rechercher un 3 ou un 4 noyés dans les 1 et 2
Il faut remettre la déclaration de speedZ comme avant et changer tous les speedZ par "moveDirection.z" dans les debug.
Le but est de comprendre l'évolution de la valeur de la variable "moveDirection.z" au cours du temps et de voir combien de temps elle conserve la valeur 1000f et où elle la perd.
Et met 1 = ,2 = ,3 = et 4 = en début de débug, c'est plus lisible que "début de..."
======
1 = Début Update, moveDirection.z = 15
2 = Fin le Update, moveDirection.z = 15
3 = Début Trigger, moveDirection.z = 15
4 = Fin Trigger, moveDirection.z = 1000
1 = Début Update, moveDirection.z = 1000
2 = Fin le Update, moveDirection.z = 15
1 = Début Update, moveDirection.z = 15
2 = Fin le Update, moveDirection.z = 15
...
comme ça dans la liste des log c'est plus simple de rechercher un 3 ou un 4 noyés dans les 1 et 2
-
- Messages : 52
- Inscription : 17 Août 2014 01:46
Re: [MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Alors, voila grosso modo ce que j'ai obtenu (je dois faire le tri dans les 999 messages de la console...) :
1 = Debut de l'Update, moveDirection.z = 5,944254
2 = Fin de l'Update, moveDirection.z = 6,118098
3 = Debut du Trigger, moveDirection.z = 6,118098
4 = Fin du Trigger, moveDirection.z = 1000
1 = Debut de l'Update, moveDirection.z = 1000
2 = Fin de l'Update, moveDirection.z = 6,29276
1 = Debut de l'Update, moveDirection.z = 0,08760933
2 = Fin de l'Update, moveDirection.z = 0
1 = Debut de l'Update, moveDirection.z = 5,944254
2 = Fin de l'Update, moveDirection.z = 6,118098
3 = Debut du Trigger, moveDirection.z = 6,118098
4 = Fin du Trigger, moveDirection.z = 1000
1 = Debut de l'Update, moveDirection.z = 1000
2 = Fin de l'Update, moveDirection.z = 6,29276
1 = Debut de l'Update, moveDirection.z = 0,08760933
2 = Fin de l'Update, moveDirection.z = 0
Re: [MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Donc le code récursif de l'Update prend le pas sur le code évènementiel du Trigger.
moveDirection.z = 1000 en sortie du trigger et en début de l'Update. Puis 1000 est remplacé.
1 : speedZ = Input.GetAxis("Vertical"); => Donc si le joueur n'appuie pas sur la touche avancer alors speedZ = 0f
2 : if (isRunning) => Non => speedZ = speedZ * walkingSpeed; => 0f fois 7.5f = 0f
3 : moveDirection = forward * speedZ + right * speedX; => forward fois 0f = 0f => Donc moveDirection.z = 0f
moveDirection.z = 1000 en sortie du trigger et en début de l'Update. Puis 1000 est remplacé.
1 : speedZ = Input.GetAxis("Vertical"); => Donc si le joueur n'appuie pas sur la touche avancer alors speedZ = 0f
2 : if (isRunning) => Non => speedZ = speedZ * walkingSpeed; => 0f fois 7.5f = 0f
3 : moveDirection = forward * speedZ + right * speedX; => forward fois 0f = 0f => Donc moveDirection.z = 0f