Page 1 sur 2

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

Publié : 19 Oct 2016 18:22
par pcpunch59
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 !

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

Publié : 20 Oct 2016 09:43
par boubouk50
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.

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

Publié : 20 Oct 2016 10:35
par pcpunch59
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 ?

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

Publié : 20 Oct 2016 10:48
par pcpunch59
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 !

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

Publié : 20 Oct 2016 10:55
par boubouk50
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.

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

Publié : 04 Fév 2019 14:27
par Baxter
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));
    }

}

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

Publié : 09 Fév 2019 17:50
par Baxter
Up

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

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

Publié : 09 Fév 2019 18:12
par Max
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;
    }

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

Publié : 10 Fév 2019 14:38
par Baxter
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

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

Publié : 10 Fév 2019 18:18
par Max
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.