[RESOLU][DB-AL] Problème de déplacement caméra du personnage

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
ludo2vie
Messages : 15
Inscription : 15 Juin 2021 05:43

[RESOLU][DB-AL] Problème de déplacement caméra du personnage

Message par ludo2vie » 18 Juin 2021 19:25

Bonjour à tous,

Je débute sous unity, et je me lance dans un jeu avec un personnage animé type GTA.
J'ai mon script de déplacement qui fonctionne bien, mais j'ai un problème avec la souris.
Avec la touche Z, j'avance, et je joue l'animation de marche.
Avec la touche S, je recule et je joue l'anim de recul.
Tout ceci fonctionne très bien.
Mon soucis et lié au pivotement. J'ai modifié mon script pour que ce soit le mouvement de souris qui fasse tourner le personnage.
ça fonctionne, mais dans le jeu, je m'aperçoit qu'il me faut faire des grand mouvement de souris pour tourner complètement. De plus, vu que ma souris se déplace, au bout d'un moment, c'est très compliqué de se déplacer correctement.
Je me demandais comment figer la souris sur ma caméra, mais qu'elle puisse quand même pivoter.

Voici mon script :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
// nom classe identique nom scripts

public class DeplacementPerso : MonoBehaviour
{

    public float speed = 10.0f; // float nbr à virgules
    public float speedRotation = 180.0f; // rotation
    public float minToMove = 0.1f;
    Animator anim;

    float horizontalSpeed = 2.0f;
    
    void Start()
    {
        anim = GetComponent<Animator>();
    }
    void Update()
    {
   
        float h = horizontalSpeed * Input.GetAxis("Mouse X");

        transform.Rotate(0,h,0);
        if (Input.GetKey(KeyCode.Z) == true)
        {
            anim.SetBool("walkplayer", true);
            gameObject.transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.Self);
        }
        else
            anim.SetBool("walkplayer", false);
        if (Input.GetKey(KeyCode.S) == true)
        {
            anim.SetBool("arriereplayer", true);
            gameObject.transform.Translate(-Vector3.forward * speed * Time.deltaTime, Space.Self);

        }
        else
            anim.SetBool("arriereplayer", false);

    }
}
Merci par avance de votre aide ;)
Dernière édition par ludo2vie le 19 Juin 2021 17:39, édité 1 fois.

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

Re: [DB-AL] Problème de déplacement caméra du personnage

Message par jmhoubre » 18 Juin 2021 22:05

Bonsoir,
dans la 1ère ligne du Update :

Code : Tout sélectionner

float h = horizontalSpeed * Input.GetAxis("Mouse X");
remplace horizontalSpeed par speedRotation. Tu peux supprimer la variable horizontalSpeed .

ludo2vie
Messages : 15
Inscription : 15 Juin 2021 05:43

Re: [DB-AL] Problème de déplacement caméra du personnage

Message par ludo2vie » 19 Juin 2021 13:35

Merci beaucoup, je vais tester ça.

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

Re: [RESOLU][DB-AL] Problème de déplacement caméra du personnage

Message par jmhoubre » 19 Juin 2021 19:08

Il faut également utiliser Time.deltaTime :

Code : Tout sélectionner

float h = speedRotation * Time.deltaTime * Input.GetAxis("Mouse X");
Explication supplémentaire de ton souci d'hier : quand tu tournes, la vitesse est exprimée en degrés par seconde. En utilisant horizontalSpeed, tu tournes de 2° par seconde, soit 45 secondes pour faire 1/4 de tour.

Répondre

Revenir vers « (C#) CSharp »