Problème de perso/manette

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
BlizZ
Messages : 38
Inscription : 22 Déc 2018 20:59

Re: Problème de perso/manette

Message par BlizZ » 19 Jan 2019 16:37

Effectivement j'ai peut etre fait ca sans faire expres et je comprend pourquoi ca ne marche pas du coup, mais comment regler le probleme alors car je ne sais pas lesquels j'ai supprimé :/

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

Re: Problème de perso/manette

Message par Max » 19 Jan 2019 16:57

C'est simple. Quand tu es sur l'InputManager, en haut à droite tu as une petite roue dentée. Clik dessus, et là tu fais 'reset'. Les paramètres par défaut seront donc de nouveau présent.
Et après, tu ajoutes tes inputs à toi, en changeant le size (qui est par défaut à 18).
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

BlizZ
Messages : 38
Inscription : 22 Déc 2018 20:59

Re: Problème de perso/manette

Message par BlizZ » 19 Jan 2019 19:17

Ok c'est bon mes problèmes sont résolus, mes boutons refonctionnes et mes personnage se déplace correctement !

Maintenant le problème du tout début était comment orienter la vu de mon perso selon l'emplacement de mon joystick de droite, a tu une idée ? (en sachant que je ne suis pas très doué encore donc plus ca sera précis plus je comprendrai )

Merci.

BlizZ
Messages : 38
Inscription : 22 Déc 2018 20:59

Problème direction personnage manette c#

Message par BlizZ » 23 Jan 2019 11:49

Bonjour,

Mon problèmes est que je n'arrive pas a déplacer mon perso manette comme je le veux. Je voudrais qu'il se déplace un peu comme un perso fifa, c'est a dire joystick de gauche pour le déplacement et celui de droite pour changer la direction du regard du perso.
Pour l'instant juste pour le déplacement j'ai codé ca :

Code : Tout sélectionner

using System.Collections;
using UnityEngine;

public class DeplacementManette : MonoBehaviour {
	
	// Update is called once per frame
	void Update () {

        //Déplacement
        transform.Translate(Vector3.forward * Input.GetAxis("LeftJoystickX") * 500 * Time.deltaTime);
        transform.Translate(Vector3.right * Input.GetAxis("LeftJoystickY") * 500 * Time.deltaTime);

    }
}

Je tiens à préciser que je suis un débutant en code c# et sur unity en général.

Merci.

Avatar de l’utilisateur
Sebela
Messages : 141
Inscription : 25 Juin 2014 21:39

Re: Problème direction personnage manette c#

Message par Sebela » 23 Jan 2019 14:32

Hello,

Mmm, impression de déjà-vu :0 ça ne serait pas la suite de ce topic ? :perv:
Bref.

Sur fifa il me semble qu'il s'agit d'une vue orbitale (qui focus le joueur tout en tournant autour).
Du coup, il faut que tu créées un empty game object Pivot à l'endroit de l'objet à focus, puis tu lui rattaches la camera et tu lui mets un script de gestion de la rotation :

Code : Tout sélectionner

   
   
   public Camera camera;
     
     void Update(){
         camera.transform.LookAt(transform);
 
         float speed = 10.0f;
         transform.Rotate(Vector3.up, Input.GetAxis("RightJoystickX") * speed);
         transform.Rotate(Vector3.left, Input.GetAxis("RightJoystickY") * speed);
     }
 }
Et le tour est joué !

BlizZ
Messages : 38
Inscription : 22 Déc 2018 20:59

Re: Problème direction personnage manette c#

Message par BlizZ » 23 Jan 2019 15:44

Je pense avoir raté quelque chose car mon perso a un comportement très étrange (il fait des tours sur lui meme et autres choses étrange). Je pense avoir été mal compris :/ Je veux que la direction dans laquel mon perso regarde sois dirigé avec mon joystick de droite, mais je ne veux pas que la camera du jeu bouge ! La camera du jeu reste statique sur la scene. Voila ce que j'ai fait pour l'instant :

Code : Tout sélectionner

using System.Collections;
using UnityEngine;

public class DeplacementManette : MonoBehaviour {

    public Camera camera;

	// Update is called once per frame
	void Update () {

        //Déplacement
        transform.Translate(Vector3.forward * Input.GetAxis("LeftJoystickX") * 500 * Time.deltaTime);
        transform.Translate(Vector3.right * Input.GetAxis("LeftJoystickY") * 500 * Time.deltaTime);

        camera.transform.LookAt(transform);

        float speed = 10.0f;
        transform.Rotate(Vector3.up, Input.GetAxis("RightJoystickX") * speed);
        transform.Rotate(Vector3.left, Input.GetAxis("RightJoystickY") * speed);

    }
}
Image

Image

Image

Effectivement j'ai reposé ma question car l'autre personne m'avait oublié je crois :cote:

Avatar de l’utilisateur
Sebela
Messages : 141
Inscription : 25 Juin 2014 21:39

Re: Problème de perso/manette

Message par Sebela » 23 Jan 2019 19:04

Re,

Ok, si c'est seulement la rotation du perso qui t'intéresse c'est beaucoup plus simple !

Mais essaye de comprendre ce qu'on t'envoie avant de le rajouter dans ton code, parce que je vois que tu as rajouté le "camera.transform.LookAt" alors que tu dis toi-même que tu ne veux pas toucher à la camera....
Pour répondre à ta question, il faut que sur le script de ton perso tu colles quelque chose comme ça :

Code : Tout sélectionner

 var input = new Vector3(Input.GetAxis("RightJoystickX"), 0, Input.GetAxis("RightJoystickY"));
 if(input != Vector3.zero)
 {
   transform.forward = input;
 }
Après il y a plusieurs possibilités ! Je te conseille de jeter un oeil sur les méthodes de rotation de Unity.
Bon courage !

BlizZ
Messages : 38
Inscription : 22 Déc 2018 20:59

Re: Problème de perso/manette

Message par BlizZ » 23 Jan 2019 20:40

Merci encore car ca marche, j'essaye de comprendre en fait mais c'est assez difficile pour moi pour l'instant.. :/

Je me rend compte que j'ai un autre problème de mouvement.. En fait mon perso quand il est de dos par rapport a la camera et bien il se déplace normalement, mais si il est face a la camera il se déplace comme si la camera etait encore dans son dos donc si mon joystick va vers la gauche le personnage ira vers la droite et inversement. C'est assez embetant car en fonction de si mon personnage tourne le dos ou pas a la camera les touches s'inversent, et c'est impossible a le controller(idem avec mon perso qui se controlle a la souris). J'aimerai vraiment que mon perso se déplace a la maniere de fifa, il regarde dans la direction de mon joystick droit, et se déplace avec le joystick gauche sans prendre en compte la direction de mon joystick droit. Je n'ai aucune idée de la difficulté pour réaliser ces deux codes (souris + manette) mais tant que je ne les ai pas, et bien mon jeu n'avance pas beaucoup. Pour l'instant mes codes sont ceux ci.

Manette :

Code : Tout sélectionner

using System.Collections;
using UnityEngine;

public class DeplacementManette : MonoBehaviour {


	// Update is called once per frame
	void Update () {

        //Déplacement
        transform.Translate(Vector3.forward * Input.GetAxis("LeftJoystickX") * 500 * Time.deltaTime);
        transform.Translate(Vector3.right * Input.GetAxis("LeftJoystickY") * 500 * Time.deltaTime);

        var input = new Vector3(Input.GetAxis("RightJoystickX"), 0, Input.GetAxis("RightJoystickY"));
        if (input != Vector3.zero)
        {
            transform.forward = input;
        }
    }
}
Souris :

Code : Tout sélectionner

using UnityEngine;

public class PlayerBase : MonoBehaviour
{

    // INSPECTOR DATA
    [SerializeField]
    private float Speed = 1.0f;  // Vitesse de déplacement
    [SerializeField]
    private float distStop = 2.0f;

    // PRIVATE DATA
    private RaycastHit hit;
    private Ray ray;
    private int mask;   // mask pour que seul le sol soit pris en compte lors du raycast

    // Use this for initialization 
    void Start()
    {
        mask = 1 << 8;
    }

    // Update is called once per frame
    void Update()
    {

        // picking sur le sol par raycast pour déterminer le point désigné
        // par la souris
        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit, Mathf.Infinity, mask))
        {   // si on est bien sur le sol, alors on oriente le player vers ce point
            transform.LookAt(hit.point);
        }

        // si on ne se trouve pas trop près du point désigné, on
        // autorise l'avancé du player
        if (Vector3.Distance(hit.point, transform.position) > distStop)
        {
            float motor = Input.GetAxis("Vertical") * Speed;
            transform.Translate(transform.forward * motor, Space.World);

            motor = Input.GetAxis("Horizontal") * Speed;                    //On peut supprimer ces 2 lignes pour que le perso se déplace
            transform.Translate(transform.right * motor, Space.World);      //Autrement que en tournant autour du curseur

        }

    }
}
Merci de l'aide.

BlizZ
Messages : 38
Inscription : 22 Déc 2018 20:59

Re: Problème de perso/manette

Message par BlizZ » 24 Jan 2019 13:15

S'il vous plait :)

Avatar de l’utilisateur
Sebela
Messages : 141
Inscription : 25 Juin 2014 21:39

Re: Problème de perso/manette

Message par Sebela » 24 Jan 2019 19:01

Hello,

Oui c'est normal, tu es dans le repère World. Il faut travailler en repère local pour que ton perso avance droit devant quelque soit son orientation.
Normalement il te suffit de remplacer tes Vector3.forward et Vector3.right par transform.forward et transform.right (repère local).

Répondre

Revenir vers « (C#) CSharp »