[Résolu] Comment faire pour qu'un objet puisse tenir en lévitation devant la caméra

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Argoss
Messages : 6
Inscription : 18 Jan 2018 12:58

[Résolu] Comment faire pour qu'un objet puisse tenir en lévitation devant la caméra

Message par Argoss » 18 Jan 2018 13:12

Bonjour !
Je suis en train de développer un petit jeu en FPS et je bloque sur une petit fonctionnalité. J'aimerai implémenter un script qui permette de "porter" un objet dans le sens où lorsque je reste appuyé sur une touche, il se met à flotter en lévitation devant ma camera, quelle que soit l'orientation de la camera.
j'ai déjà un script qui fonctionne mais à moitié : mon objet est bien à hauteur de caméra, il reste bien en lévitation mais ne suit pas l'orientation de la caméra, je n'arrive pas à utiliser le repère orthonormé propre à celle-ci.

voici mon code :

Code : Tout sélectionner

void Update()
 {
     if (Input.GetKey(KeyCode.F) && m_triggered)
     {
         this.transform.position = new Vector3(m_PlayerTransform.position.x, m_PlayerTransform.position.y, m_PlayerTransform.position.z + 2f);
     }
 }
le Script est appliqué sur l'objet à soulever.
Dernière édition par Argoss le 22 Jan 2018 17:16, édité 1 fois.

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

Re: Comment faire pour qu'un objet puisse tenir en lévitation devant la caméra

Message par boubouk50 » 18 Jan 2018 14:02

Tout simplement, tu pourrais le parenter à la caméra avec une position prédéfinie. Puis le remettre à sa place après.
"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

Argoss
Messages : 6
Inscription : 18 Jan 2018 12:58

Re: Comment faire pour qu'un objet puisse tenir en lévitation devant la caméra

Message par Argoss » 22 Jan 2018 11:26

En effet merci ! ça commence à mieux fonctionner.

Ma caméra n'est pas fixe (c'est un FPSController) du coup y a encore quelques comportements gênants quand je bouge. je vais essayer de jouer avec la propriétés du rigidBody de l'objet que je déplace pour éviter les désagréments.

Argoss
Messages : 6
Inscription : 18 Jan 2018 12:58

Re: Comment faire pour qu'un objet puisse tenir en lévitation devant la caméra

Message par Argoss » 22 Jan 2018 17:15

Me revoilà ! j'ai trouvé une solution qui me convient parfaitement en m'inspirant de l'utilisation du ViewportPointToRay de ma camera :

Code : Tout sélectionner

 void Update()
    {
        RaycastHit hit;
        Ray ray = camera.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));

        if (Physics.Raycast(ray, out hit))
        {
            Transform objecthit = hit.transform;
            if (m_PropLocked)
            {
                GestionProps(m_LastHitObject);
            }
            else
            {
                if (objecthit.tag == "Player")
                {

                }
                else
                {
                    m_TargetName.text = objecthit.name;
                    if (objecthit.tag == "Prop")
                    {
                        m_LastHitObject = objecthit;
                        GestionProps(objecthit);
                    }
                }
            }
        }
        else
        {
            m_TargetName.text = "Nothing";
        }
        
        private void GestionProps(Transform objecthit)
    {

        if (Input.GetKey(KeyCode.F))
        {
            m_PropLocked = true;
            objecthit.position = camera.ViewportToWorldPoint(new Vector3(0.5F, 0.4F, 3f));
            objecthit.eulerAngles = transform.eulerAngles;

        }
        else
        {
            m_PropLocked = false;
        }
    }
    }
J'ai modifié la gestion du script du coup, il n'est plus attaché à l'objet à porter mais au FpsController.

Répondre

Revenir vers « Scripting »