A l'arrêt du mouvement il y a un leger effet de glissement

Pour les scripts écrits en C#
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
krougmolotov
Messages : 2
Inscription : 24 Fév 2015 04:17

A l'arrêt du mouvement il y a un leger effet de glissement

Message par krougmolotov » 24 Fév 2015 04:26

Bonjour,

J'ai un jeu style zelda like en 2d (vue du dessus), mon mouvement fonctionne parfaitement, ceci dit quand j'arrête d'appuyer sur les touches Z,Q,S,D ou up,left,down,right pour stopper complemement le mouvement de mon personnage, il glisse légèrement avant de s’arrêter.

Ce que je voudrais c'est qu'il stop net son mouvement quand j'arrête d'appuyer sur mes touches de déplacement.

J'ai cherché un peu sur le forum et je n'ai pas trouvé ma réponse, si je fais un doublon je ne suis pas contre un petit lien me menant jusqu'au post concerné.

Merci d'avance.

Voici mon code :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {
	
		public float speed;
		private Vector3 target;
		
		void Start () {
		}
		
		void Update () {

		float moveHorizontal = Input.GetAxis ("Horizontal");
		float moveVertical = Input.GetAxis ("Vertical");
		
		Vector3 movement = new Vector3 (moveHorizontal, moveVertical, 0.0f);
		rigidbody2D.transform.position += movement * speed * Time.deltaTime;
      }
}

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

Re: A l'arrêt du mouvement il y a un leger effet de glisseme

Message par boubouk50 » 24 Fév 2015 11:00

En théorie, ton code est bon, puisque le déplacement dépend directement des Inputs.
Si tu n'appuies sur aucune touche, alors movement = (0, 0, 0) donc pas de mouvement.
Peut-être as-tu quelque part ailleurs un autre script qui joue sur le déplacement? Ou bien Horizontal et Vertical sont également attribués à d'autres Input (souris par ex) qui pourrait parasiter le déplacement.

Pour tester, tu peux récupèrer directement les Input à partir de GetKey(), pour que le déplacement ne dépende uniquement des 4 touches que tu souhaites. Si le pb persiste, je te dirai que le pb est ailleurs.
"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

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

Re: A l'arrêt du mouvement il y a un leger effet de glisseme

Message par artemisart » 24 Fév 2015 16:15

Ça pourrait aussi venir du rigidbody qui a une certaine inertie.
T'en as vraiment besoin ? sinon si tu le mets en kinematic il glisse toujours ?

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: A l'arrêt du mouvement il y a un leger effet de glisseme

Message par ZJP » 24 Fév 2015 16:56

a) Résolu par la friction a l'aide du Physic Material.
Unity Manuel a écrit :
Static Friction

The friction used when an object is laying still on a surface. Usually a value from 0 to 1. A value of zero feels like ice, a value of 1 will make it very hard to get the object moving.
ou

b) Résolu à l'aide du Drag.
Unity Manuel a écrit :
Drag

How much air resistance affects the object when moving from forces. 0 means no air resistance, and infinity makes the object stop moving immediately.
Modification du Drag à l’arrêt des appuis de déplacements (par exemple).

Code : Tout sélectionner

if (moveHorizontal) rigidbody.drag = 0.0f;
else  rigidbody.drag = 1000000.0f; // ;)
donc, +1 pour l'inertie du RB. :mrgreen:

krougmolotov
Messages : 2
Inscription : 24 Fév 2015 04:17

Re: A l'arrêt du mouvement il y a un leger effet de glisseme

Message par krougmolotov » 02 Mars 2015 23:13

ok merci pour les réponses, je vais voir ça.

Répondre

Revenir vers « (C#) CSharp »