[RESOLU] Detecter si le player se déplace 2D

Modérateur : Administrateurs Suppléants

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
Avatar de l’utilisateur
pcpunch59
Messages : 103
Inscription : 28 Fév 2016 17:41

[RESOLU] Detecter si le player se déplace 2D

Message par pcpunch59 » 19 Oct 2016 18:22

Bonjour,

je déplace mon player avec transform.translate en utilisant le vector2.right.

Le problème c'est que je voudrais détecter si il se déplace.
- J'ai essayer avec velocity.magnitude mais sur l'axe x ça me renvoie 0 , sur le Y lors du saut ca renvoie bien les données.
- Ensuite j'ai éssayer avec un script du genre , mais le soucis c'est que les valeurs même arrondie a 1 décimal ne sont pas forcement identique !

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class parallaxScript : MonoBehaviour {

    float offest;
    public float speed;
    public Vector2 Lastposition;
    public GameObject Player; 

    void FixedUpdate ()
    {
       Vector2 val = Player.transform.localPosition;
        if(Lastposition!= val)        
        {
            offest += Input.GetAxis ("Horizontal") * speed * Time.deltaTime;
            GetComponent<Renderer> ().material.SetTextureOffset ("_MainTex", new Vector2 (offest, 0));
           
        }
       Lastposition = val;
    }
 }

Quelle moyen existe t-il pour simplement savoir si mon player se déplace.
Ps: je ne peux pas tester les input.getaxis, car j'utilise un background parallax qui defile en fonction du get axis et lorsque mon player rencontre un obstacle, le fond continue de défilé c est tout mon problème !
Dernière édition par pcpunch59 le 20 Oct 2016 12:53, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 4735
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [MY-AL] Detecter si le player se déplace 2D

Message par boubouk50 » 20 Oct 2016 09:43

Si tu déplaces ton perso avec translate, alors tu agis sur le transform donc tu peux simplement comparer la position actuelle avec la position précédente. Si elle est différente, il bouge.
"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
pcpunch59
Messages : 103
Inscription : 28 Fév 2016 17:41

Re: [MY-AL] Detecter si le player se déplace 2D

Message par pcpunch59 » 20 Oct 2016 10:35

Non ca ne marcher pas bien, j'ai fait ca dans le script en exemple ci dessus.

En faite mon problème c'est que j'utilise un background avec effet parallax, je me base sur l input.getaxis pour déplacer les layers du background. Mais lors que je met une plateforme sur la scène le player entre bien collision avec mais les valeurs ne reste pas fixe.
Du coup en comparant le lest transform et le current, il y a toujours un leger decalage ex:
lasttransform : 5.23xx et le current : 5.24xxx du coup le background défile légèrement !

la solution aurait été je pense d'utilisé la vélocity magnitude mais sur le x ca me renvoie 0 ? sur le Y ca fontionne je ne comprend pas pourquoi ?

Avatar de l’utilisateur
pcpunch59
Messages : 103
Inscription : 28 Fév 2016 17:41

Re: [MY-AL] Detecter si le player se déplace 2D

Message par pcpunch59 » 20 Oct 2016 10:48

Ok j'ai trouver la solution !

je fait défiler mon background non plus en fonction du input.getaxis("horizontal") mais en fonction de la position x du player !

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 4735
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [MY-AL] Detecter si le player se déplace 2D

Message par boubouk50 » 20 Oct 2016 10:55

Fais bien attention avec les différents repères: transform.localPosition est la position par rapport au parent, transform.position est celle par rapport au World. localPosition ne change que si une translation s'opère sur ce même gameobject, pas sur ces parents.
Ensuite pour la vélocité, je ne vois pas. Normalement, elle est non nulle si le perso est en mouvement. A moins que tu n'utilises pas la physique pour déplacer ton personnage en x (supposition), ce que je déduis par ton post: je déplace mon player avec transform.translate en utilisant le vector2.right.. Il faudrait plutôt faire cela avec le rigidBody2D et les AddForce ().

EDIT - Si le problème est résolu, édite ton premier post et insère [RESOLU] au début du titre.
"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

Baxter
Messages : 7
Inscription : 04 Fév 2019 13:42

Re: [RESOLU] Detecter si le player se déplace 2D

Message par Baxter » 04 Fév 2019 14:27

Bonjour,

Désolé pour le déterrage :roll:
j'ai exactement le même problème! (Je pense que l'on a suivi le même tuto sur le net :perv: )

La personne l'a résolu en faisant défiler le background non plus en fonction du input.getaxis("horizontal") mais en fonction de la position x du player ! Cela est la solution

Comment récupérer et insérer dans mon code (ci-dessous) la position x du player pour remplacer "input.getaxis("horizontal")"?
Je dois utiliser getComponent du GameObject "player"?, transform.x?
Quelqu'un peut m'aiguiller?

Désolé je débute et je suis un peu pommé 8/

Bax


Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PARALLAX : MonoBehaviour
{
    float offset;
    public float speed;

    void Update()
    {
        offset += Input.GetAxis("Horizontal") * speed;
        GetComponent<Renderer>().material.SetTextureOffset("_MainTex", new Vector2(offset,0));
    }

}

Baxter
Messages : 7
Inscription : 04 Fév 2019 13:42

Re: [RESOLU] Detecter si le player se déplace 2D

Message par Baxter » 09 Fév 2019 17:50

Up

Quelqu'un peut m'orienter? :?
S'il vous plait.

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 6762
Inscription : 30 Juil 2011 13:57

Re: [RESOLU] Detecter si le player se déplace 2D

Message par Max » 09 Fév 2019 18:12

Hello,

Il existe plusieurs solutions.
En voici une: si on part du principe que ton player est tangué "Player", niveau script tu peux récupérer son Transform comme ceci:

Code : Tout sélectionner

    private Transform playertransform;

    private void Start()
    {
        GameObject player = GameObject.FindGameObjectWithTag("Player");
        playertransform = player.transform;
    }
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Baxter
Messages : 7
Inscription : 04 Fév 2019 13:42

Re: [RESOLU] Detecter si le player se déplace 2D

Message par Baxter » 10 Fév 2019 14:38

Salut Max,

Merci pour ta réponse :) .
ça marche pour récuperer la position.

Cependant, faire défiler le background non plus en fonction du input.getaxis("horizontal") mais en fonction de la position x du player ne semble pas être la solution :cry: (ou alors je m'y prend mal).

input.getaxis("horizontal") est un float qui va de -1 (quand je vais vers la gauche) à +1 (vers la droite).
or la position du joueur augmente ou diminue sans limite...
Donc en gros plus j'avance vers la droite par ex plus le fond défile rapidement.

En fait si on reprend le problème à la base c'est çà:
j'utilise un background parallax qui defile en fonction du get axis et lorsque mon player rencontre un obstacle et que je reste appuyé sur la touche "avance", le fond continue de défiler alors que le joueur bouge plus.

Je continue de chercher...
Si vous avez des pistes je prends :triste1:

Bax

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 6762
Inscription : 30 Juil 2011 13:57

Re: [RESOLU] Detecter si le player se déplace 2D

Message par Max » 10 Fév 2019 18:18

Bonjour,
Baxter a écrit :
10 Fév 2019 14:38
En fait si on reprend le problème à la base c'est çà:
j'utilise un background parallax qui defile en fonction du get axis et lorsque mon player rencontre un obstacle et que je reste appuyé sur la touche "avance", le fond continue de défiler alors que le joueur bouge plus.
Il ne faut pas te baser sur la position de ton Player. Mais plutôt globalement je dirais sur sa vélocité. Si il est à l'arrêt (quelque soit le motif), pas de défilement. Si il marche alors défilement petite vitesse. Si il court, alors défilement plus vite. et ainsi de suite. Le principe est là. A toi de mettre ça en forme et le coder. Cela a d'ailleurs été évoqué dans les précédents message.
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « (C#) CSharp »