Movement joystick mobile

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Valva
Messages : 23
Inscription : 30 Mai 2020 17:10

Movement joystick mobile

Message par Valva » 30 Mai 2020 17:18

Bonjour cher codeurs, j'essaie d'implementer un joystick pour mobile dans mon jeu. Seulement le script donne un mouvement sur l'axe X et Y alors que je voudrais me déplacer sur l'axe X et Z. Pouvez vous m'aider ?

Code : Tout sélectionner

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

public class JoystickMobile : MonoBehaviour
{

    public Transform player;
    public float speed = 5.0f;
    private bool touchStart = false;
    private Vector2 pointA;
    private Vector2 pointB;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            pointA = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y, Camera.main.transform.position.z));

        }
        if (Input.GetMouseButton(0))
        {
            touchStart = true;
            pointB = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.z));
        }
        else
        {
            touchStart = false;
        }


    }
    private void FixedUpdate()
    {
         if(touchStart)
        {
            Vector2 offset = pointB - pointA;
            Vector2 direction = Vector2.ClampMagnitude(offset, 1.0f);
            moveCharacter(direction*-1);
        }

    }
    void moveCharacter(Vector2 direction)
    {
        player.Translate(direction * speed * Time.deltaTime);
    }
}

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Movement joystick mobile

Message par djulio74 » 30 Mai 2020 18:39

Salut a toi.
Cela viens du fait que sur l'ecran, tout se passe en deux dimension (x,y), hors visiblement dans ton jeux en 3 dimension (x,y,z)
en donnant une direction (x,y) por le deplacement ton perso, unity complete l'axis manquant par zero, tu te retrouve donc avec (x,y,0) alors que pour déplacer ton perso "a plat" cela devrait etre (x,0,y) avec x et y tes coordonnée de ton joystick a l'écran.

ta void Movecharacter devrait dépendre d'un vector3 :

Code : Tout sélectionner

   private void FixedUpdate()
    {
         if(touchStart)
        {
            Vector2 offset = pointB - pointA;
            //Vector2 direction = Vector2.ClampMagnitude(offset, 1.0f);
            Vector2 direction2D = Vector2.ClampMagnitude(offset, 1.0f);
            Vector3 direction3D = new Vector3(direction2D.x, 0, direction2D.y);
            
            //moveCharacter(direction*-1);
            moveCharacter(direction3D*-1);
        }

    }
   // void moveCharacter(Vector2 direction)
    void moveCharacter(Vector3 direction)
    {
        player.Translate(direction * speed * Time.deltaTime);
    }
Ce genre de solution devrait corriger le problème, en transposant un vector2 en vector3.
Je n'as pas testé, il peut y avoir une ou deux faute de frappe peut être, mais dans le principe c'est ça.x

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Valva
Messages : 23
Inscription : 30 Mai 2020 17:10

Re: Movement joystick mobile

Message par Valva » 31 Mai 2020 18:52

Merci bien l'ami.
Cependant le mouvement est absolument horrible ;D
Me reste plus qu'à chercher un autre moyen de realiser un mouvement propre.

Répondre

Revenir vers « Scripting »