[Résolu]Rotation d'un objet devant la caméra

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
stigma
Messages : 1521
Inscription : 17 Nov 2012 18:29
Localisation : Perdu dans les mondes de Myst

[Résolu]Rotation d'un objet devant la caméra

Message par stigma » 09 Sep 2024 15:01

Quand le joueur clique sur un objet (posé sur une table ou une étagère), l'objet se rapproche de la caméra puis il pivote sur 360° avec la souris.
ça marche, sauf que parfois (pas toujours), le joueur se met à pivoter doucement sur l'axe y, alors que j'ai désactivé le mouvement du joueur et bloqué la caméra.
Voici le script MoveTowardsCamera :

Code : Tout sélectionner

using UnityEngine;

public class MoveTowardsCamera : MonoBehaviour
{
    public float speed = 1f; // Vitesse à laquelle l'objet se rapproche
    public Transform targetCamera; // La caméra vers laquelle l'objet se rapproche
    public float stopDistance = 1f; // Distance minimale à laquelle l'objet doit s'arrêter par rapport à la caméra

    void Start()
    {
        // Si aucune caméra n'est assignée manuellement, utiliser la caméra principale
        if (targetCamera == null)
        {
            if (Camera.main != null)
            {
                targetCamera = Camera.main.transform;
            }
            else
            {
                Debug.LogError("No main camera found. Please assign a camera to the targetCamera field.");
                Destroy(this);
            }
        }
    }

    void Update()
    {
        // Calculer la distance actuelle entre l'objet et la caméra
        float distanceToCamera = Vector3.Distance(transform.position, targetCamera.position);

        // Si l'objet est plus loin que la distance minimale définie, continuer à le rapprocher
        if (distanceToCamera > stopDistance)
        {
            // Calculer la direction vers la caméra
            Vector3 directionToCamera = (targetCamera.position - transform.position).normalized;

            // Déplacer l'objet dans cette direction à la vitesse définie
            transform.position += directionToCamera * speed * Time.deltaTime;
        }
    }
}
Et celui de mouseRotate :

Code : Tout sélectionner

using UnityEngine;

public class mouseRotate : MonoBehaviour
{
    public float sensitivityX = 360f;
    public float sensitivityY = 360f;

    private float rotationX = 0f;
    private float rotationY = 0f;

    void Start()
    {
        // Pas besoin de référence de la caméra, on veut que l'objet tourne indépendamment.
    }

    void Update()
    {
        // Récupérer les mouvements de la souris pour X et Y
        float mouseX = Input.GetAxis("Mouse X") * sensitivityX * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * sensitivityY * Time.deltaTime;

        // Ajouter les mouvements de la souris aux variables de rotation
        rotationX += mouseX;
        rotationY -= mouseY; // On inverse l'axe Y

        // Appliquer les rotations sur l'objet indépendamment
        //rotationY = Mathf.Clamp(rotationY, -80f, 80f); // Limite la rotation sur l'axe Y

        // Appliquer la rotation uniquement à l'objet, sans affecter le joueur ni la caméra
        transform.localRotation = Quaternion.Euler(rotationY, rotationX, 0f);
    }
}
Dernière édition par stigma le 11 Sep 2024 08:32, édité 1 fois.
Il n'y a que les poissons morts qui suivent le courant.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6434
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Rotation d'un objet devant la caméra

Message par boubouk50 » 09 Sep 2024 16:43

Aucun de tes scripts n'influe sur le déplacement du joueur, donc à priori, le pb n'est pas ici.
Il doit donc se situer sur le script qui déplace (en l'occurrence tourne) le joueur.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
stigma
Messages : 1521
Inscription : 17 Nov 2012 18:29
Localisation : Perdu dans les mondes de Myst

Re: Rotation d'un objet devant la caméra

Message par stigma » 09 Sep 2024 16:54

portant je désactive le script "First Person Controller" du player et le script "First Person Look" de la caméra.
Il n'y a que les poissons morts qui suivent le courant.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6434
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Rotation d'un objet devant la caméra

Message par boubouk50 » 09 Sep 2024 17:13

Y'a-t-il de la physique sur ton personnage ?
Peut-être est-ce le rigidbody qui permet ces mouvements ?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
stigma
Messages : 1521
Inscription : 17 Nov 2012 18:29
Localisation : Perdu dans les mondes de Myst

Re: Rotation d'un objet devant la caméra

Message par stigma » 10 Sep 2024 09:18

oui il a un Rigidbody, mais si je l'enlève il ne marche plus.
Il n'y a que les poissons morts qui suivent le courant.

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

Re: Rotation d'un objet devant la caméra

Message par EmileF » 10 Sep 2024 10:01

Salut
Perso j'utilise le character controller il n'y a plus besoin du rigidbody mais je ne sais pas si c'est valable dans ton cas
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6434
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Rotation d'un objet devant la caméra

Message par boubouk50 » 10 Sep 2024 10:04

stigma a écrit :
10 Sep 2024 09:18
oui il a un Rigidbody, mais si je l'enlève il ne marche plus.
Ce n'est pas la question.
Le rigidbody est un component qui a la possibilité de faire bouger ton personnage. Donc, la rotation légère que tu vois peut être induite par le rigidbody.
Donc, l'idée est de tester en direct quand tu vois cette rotation indésirable, de "couper" le rigidbody pour voir si la rotation s'arrête et déterminer si c'est lui qui est en cause.
Par couper, tu peux freeze les translations et rotations par ex. Et les remettre quand tu ne visualises plus un objet.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
stigma
Messages : 1521
Inscription : 17 Nov 2012 18:29
Localisation : Perdu dans les mondes de Myst

Re: Rotation d'un objet devant la caméra

Message par stigma » 10 Sep 2024 10:45

J'ai trouvé. Dans Constraints, je n'avais pas coché Freeze Rotation en Y
oupss :o
Merci Boubouk
Il n'y a que les poissons morts qui suivent le courant.

Répondre

Revenir vers « Scripting »