[RÉSOLU] Diriger personnage avec la souris sur jeu type Zelda 2D.....

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
SVPROG
Messages : 7
Inscription : 27 Mai 2020 18:07

[RÉSOLU] Diriger personnage avec la souris sur jeu type Zelda 2D.....

Message par SVPROG » 27 Mai 2020 22:39

Bonjour, je débute en codage C# et commence les problèmes, quelqu'un pourrait-il me donner une solution en C# permettant de déplacer mon personnage grâce à la souris et non les touches du clavier sur un jeux de type Zelda en 2D.
En effet j'ai réussi à trouver comment faire avec les touches du clavier (les flèches), mais la souris c'est une autre histoire!
Merci par avance pour vos coup de mains !

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Diriger personnage avec la souris sur jeu type Zelda 2D.....

Message par Max » 28 Mai 2020 08:19

Bonjour SVPROG ,
SVPROG a écrit :
27 Mai 2020 22:39
permettant de déplacer mon personnage grâce à la souris
Les informations de position de la souris sont récupérable par le biais de Input.mousePosition. Tu peux aussi passer par Input.GetAxis ("Mouse X") et Input.GetAxis ("Mouse Y") .
Si par contre tu souhaites plutôt passer par une méthode point and click, alors il faut que tu regardes du coté de Camera.ScreenToWorldPoint.

Après si tu coinces niveau mise en œuvre, n'hésite pas à poster ton code, on t'aidera à avancer.
Image
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

Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

Re: Diriger personnage avec la souris sur jeu type Zelda 2D.....

Message par jmhoubre » 28 Mai 2020 11:52

Pas directement liée, mais intéressante à connaître : la navigation avec un NavMeshAgent. Le NavMesh permet à un personnage de se diriger vers une destination en évitant les obstacles et les autres personnages, tout en en interdisant certaines parties (bon c'est un sacré résumé, mais l'idée est là).

SVPROG
Messages : 7
Inscription : 27 Mai 2020 18:07

Re: Diriger personnage avec la souris sur jeu type Zelda 2D.....

Message par SVPROG » 28 Mai 2020 12:38

Max a écrit :
28 Mai 2020 08:19
Bonjour SVPROG ,
SVPROG a écrit :
27 Mai 2020 22:39
permettant de déplacer mon personnage grâce à la souris
Les informations de position de la souris sont récupérable par le biais de Input.mousePosition. Tu peux aussi passer par Input.GetAxis ("Mouse X") et Input.GetAxis ("Mouse Y") .
Si par contre tu souhaites plutôt passer par une méthode point and click, alors il faut que tu regardes du coté de Camera.ScreenToWorldPoint.

Après si tu coinces niveau mise en œuvre, n'hésite pas à poster ton code, on t'aidera à avancer.
Merci de ta réponse, je joins mon code de façon à ce que ce soit plus clair pour tous, mais je ne sais toujours pas ce qui ne fonctionne pas. Vous verrez il y a une partie du code qui est mise en commentaire, c'est la partie que je pensais pour gérer la souris avec quelques Debug.Log qui me permettait de voir en console que la souris était bien là!

Code : Tout sélectionner

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

public class PlayerMovement : MonoBehaviour
{
    public float vitesse;
    private Rigidbody2D monRigidBody;
    private Vector3 change;
   // Vector3 newPosition = Vector3.zero;
   // public GameObject Point;

    // Start is called before the first frame update
    void Start()
    {
        monRigidBody = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        change = Vector3.zero;
        change.x = Input.GetAxisRaw("Horizontal");
        change.y = Input.GetAxisRaw("Vertical");
        if (change != Vector3.zero)
        {
            BougePersonnage();
        }
        /*if (Input.GetMouseButtonDown(0))  --> Test diriger personnage avec souris
        {
            RaycastHit hit;
            Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
            if (Physics.Raycast(ray, out hit))
            {
               newPosition = hit.point; 
            }
            if (newPosition != Vector3.zero)
            {
                transform.position = Vector3.MoveTowards(transform.position, newPosition, vitesse * Time.deltaTime);
            }
            Debug.Log("Click gauche");
        }
        /*if (Input.GetMouseButtonDown(1))
        {
            Debug.Log("Click droit");
        }
        if (Input.GetMouseButtonDown(2))
        {
            Debug.Log("Click molette");
        }*/
    }
    void BougePersonnage()
    {
        monRigidBody.MovePosition(transform.position + change * vitesse * Time.deltaTime);
    }  
}


Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Diriger personnage avec la souris sur jeu type Zelda 2D.....

Message par Max » 28 Mai 2020 13:04

ok, bon si on reprend ton code actuel, tu peux essayer de remplacer

Code : Tout sélectionner

        change.x = Input.GetAxisRaw("Horizontal");
        change.y = Input.GetAxisRaw("Vertical");
par

Code : Tout sélectionner

        change.x = Input.GetAxis("Mouse X");
        change.y = Input.GetAxis("Mouse Y");
Image
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

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: Diriger personnage avec la souris sur jeu type Zelda 2D.....

Message par EmileF » 28 Mai 2020 14:22

Salut,
Ne pas oublier de donner une valeur à la variable vitesse dans l'inspector
C'est une erreur que j'ai déjà faite,
Et dans ce cas, ça marche, mais rien ne bouge.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

SVPROG
Messages : 7
Inscription : 27 Mai 2020 18:07

Re: Diriger personnage avec la souris sur jeu type Zelda 2D.....

Message par SVPROG » 28 Mai 2020 14:27

Merci , effectivement le personnage suit la souris, mais en fait je me suis mal expliqué peut être, en fait bje souhaiterai que lorsque je clique à un endroit sur ma carte, le personnage se déplace jusqu'à l'endroit désigné, mais tant que je n'ai pas cliqué, il reste dans sa position initiale!
Idem pour la gauche, la droite, le bas et le haut!

Merci encore

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: Diriger personnage avec la souris sur jeu type Zelda 2D.....

Message par EmileF » 28 Mai 2020 16:17

Dans ce cas, va voir le conseil de Max
Max a écrit :Si par contre tu souhaites plutôt passer par une méthode point and click, alors il faut que tu regardes du coté de Camera.ScreenToWorldPoint
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Avatar de l’utilisateur
E3DStef
Administrateur
Administrateur
Messages : 1646
Inscription : 14 Juil 2013 18:30
Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/

Re: Diriger personnage avec la souris sur jeu type Zelda 2D.....

Message par E3DStef » 29 Mai 2020 19:44

SVPROG a écrit :
28 Mai 2020 14:27
Merci , effectivement le personnage suit la souris, mais en fait je me suis mal expliqué peut être, en fait bje souhaiterai que lorsque je clique à un endroit sur ma carte, le personnage se déplace jusqu'à l'endroit désigné, mais tant que je n'ai pas cliqué, il reste dans sa position initiale!
Idem pour la gauche, la droite, le bas et le haut!

Merci encore
Il faut que tu passe par un event CLIC

Genre

If ClicBoutonGaucheSouris
directionX = position X de la souris
directionY = position Y de la souris
fin if

Code : Tout sélectionner

 void Update()
{
	if (Input.GetMouseButton(0))
    	{
		change.x = Input.GetAxis("Mouse X");
		change.y = Input.GetAxis("Mouse Y");
            		BougePersonnage();
        	}
}
Essaie et dis nous
Le Savoir n'est Précieux que s'il est Partagé

Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com

SVPROG
Messages : 7
Inscription : 27 Mai 2020 18:07

Re: Diriger personnage avec la souris sur jeu type Zelda 2D.....

Message par SVPROG » 30 Mai 2020 21:17

Merci pour vos réponses!
Avec les modifs que tu m'as proposé, le personnage suit bien la souris, dans toutes directions, mais est constamment rattaché au mouvement de la souris. En fait ce que je souhaiterais, c'est qu'il se déplace au clic de souris et s'arrête à l'endroit où j'ai cliqué, un peu comme dans "Heros III" (un peu seulement,j'ai pas encore la prétention de faire un jeu comme ça ;O). Je joins le code :

Code : Tout sélectionner

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

public class PlayerMovement : MonoBehaviour
{
    public float vitesse;
    private Rigidbody2D monRigidBody;
    private Vector3 change;
   // Vector3 newPosition = Vector3.zero;
   // public GameObject Point;

    // Start is called before the first frame update
    void Start()
    {
        monRigidBody = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        change = Vector3.zero;
        change.x = Input.GetAxisRaw("Mouse X");
        change.y = Input.GetAxisRaw("Mouse Y");
       // if (change != Vector3.zero)
       // {
            BougePersonnage();
       // }
        /*if (Input.GetMouseButtonDown(0))  --> Test diriger personnage avec souris
        {
            RaycastHit hit;
            Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
            if (Physics.Raycast(ray, out hit))
            {
                newPosition = hit.point; 
            }
            if (newPosition != Vector3.zero)
            {
                transform.position = Vector3.MoveTowards(transform.position, newPosition, vitesse * Time.deltaTime);
            }
            Debug.Log("Click gauche");
        }
        /*if (Input.GetMouseButtonDown(1))
        {
            Debug.Log("Click droit");
        }
        if (Input.GetMouseButtonDown(2))
        {
            Debug.Log("Click molette");
        }*/
    }
    void BougePersonnage()
    {
        monRigidBody.MovePosition(transform.position + change * vitesse * Time.deltaTime);
    }  
}
PS: Ce que j'ai mis en commentaire sont mes divers essais pas très concluants!
Encore merci à vous !

Répondre

Revenir vers « Scripting »