adoucir la rotation ? #2

Règles du forum
Attention, si vous postez un lien vers un package (en guise d'exemple), assurez-vous qu'il ne contient que des éléments personnels et/ou libres de droit (donc sans l'asset PlayMaker dedans)

Sinon c'est assimilé à du piratage par diffusion sans autorisation de contenus protégés

Les modos auront alors comme consigne de carrément supprimer votre question
flora
Messages : 5
Inscription : 20 Nov 2015 19:18

adoucir la rotation ? #2

Message par flora » 20 Nov 2015 19:56

salut a tous :)

j'ai une petite question :

- j'ai un vaisseau spatial , object 3d avec collider et rigidbody
- la camera est placee en tant qu'enfant du vaisseau et est placee de maniere a simuler une vue cockpit, ou vue a la premiere personne
- le vaisseau se deplace seulement a droite ou a gauche et s'incline tout en le faisant (comme une moto) .. voici le script utilise :

Code : Tout sélectionner

public class PlayerController : MonoBehaviour
{
    public float speed;
    public float tilt;
    
    void FixedUpdate ()
    {
        float moveHorizontal = Input.GetAxis ("Horizontal");
        float moveVertical = Input.GetAxis ("Vertical");

        Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
        
        rigidbody.velocity = movement * speed;
        rigidbody.rotation = Quaternion.Euler (0.0f, 0.0f, rigidbody.velocity.x * -tilt);
    }
}
Le script marche tres bien et serait parfait si ma camera avait une vue du dessus, mais la ma vue est a la premiere personne et du coup le mouvement/rotation de la camera est un peu trop brut de decoffrage (mouvement/rotation genere par le script puisque la camera est enfant du vaisseau)
Donc voici ma question : comment puis je adoucir/smooth/ease/lerp ce mouvement/rotation afin d'obtenir un mouvement/rotation fluide comme celui d'un skieur qui slalome par example ?
Le tout si possible en utilisant playmaker :) ou via le script si c'est plus simple pour vous.

bonne journee a tous
Dernière édition par flora le 21 Nov 2015 18:22, édité 1 fois.

Avatar de l’utilisateur
MasterNovice
Messages : 610
Inscription : 23 Juil 2011 16:03

Re: adoucir la rotation ?

Message par MasterNovice » 20 Nov 2015 20:49

Salut,

Ca fait un moment que je n'ai pas touché Unity mais si je ne dis pas de bêtises tu devrais stocker ta rotation calculée dans une variable disons... "targetRotation"

puis faire un:

Code : Tout sélectionner

rigidbody.rotation = Quaternion.Slerp(rigidbody.rotation, targetRotation, Time.deltaTime * vitesseSmooth);
(vitesseSmooth est une variable ou une valeur comme tu veux, qui gère la vitesse du smooth)

http://docs.unity3d.com/ScriptReference ... Slerp.html

flora
Messages : 5
Inscription : 20 Nov 2015 19:18

Re: adoucir la rotation ?

Message par flora » 20 Nov 2015 22:50

super .. le "Quaternion.Slerp" a l'air d'etre exactement ce que je recherchais .. merci :)

je viens de regarder dans l' ecosystem et je viens de trouver une action "Quaternion.Slerp" qui fais exactement ca ... cool :)

merci pour ton aide MasterNovice !

flora
Messages : 5
Inscription : 20 Nov 2015 19:18

Re: adoucir la rotation ? #2

Message par flora » 21 Nov 2015 17:44

apres differents essais, j'ai finalement utilise l'action Float Lerp .. le resultat est deja bien meilleur qu'au debut mais je n'arrive pas a obtenir cet effect de skieur qui slalome .. j'ai essaye differentes choses, mais sans succes.

Qelqu'un a t'il une idee de comment je pourrai m'y prendre dans playmaker .. de la logique a utilise ?

merci :)

Avatar de l’utilisateur
Thyriax
Messages : 221
Inscription : 09 Mars 2011 11:57
Contact :

Re: adoucir la rotation ? #2

Message par Thyriax » 22 Nov 2015 11:17

Salut.
1ere chose : Pour ma part, lorsque je veux "contrôler" une camera, je n'applique pas directement les actions sur elle, mais sur un "empty object" enfant (voir même un "empty object" libre mais avec un "look at" sur la camera".
2eme chose : Tu peux scinder ton action en 2 parties. La première rapide, avec un Lerp comme tu as fait (avec peut-être un float multiplicateur), puis dans un deuxième temps, lorsque la camera reprend sa position initiale, faire un autre Lerp.
Il faut , comme le dit MasterNovice, que tu mettes ces différentes valeurs dans des variables. Ensuite, soit tu limites ses valeurs (avec l'action "Clamp"), soit tu fais un "Float Compare" qui stoppe ta rotation lorsque la variable atteint une certaine valeur.

Voila, j'espère avoir été assez explicite .
bon courage pour la suite.

flora
Messages : 5
Inscription : 20 Nov 2015 19:18

Re: adoucir la rotation ? #2

Message par flora » 22 Nov 2015 17:48

salut thyriax :)
1ere chose : Pour ma part, lorsque je veux "contrôler" une camera, je n'applique pas directement les actions sur elle, mais sur un "empty object" enfant (voir même un "empty object" libre mais avec un "look at" sur la camera".
ca c'est bon, je fais toujours ca aussi.
2eme chose : Tu peux scinder ton action en 2 parties. La première rapide, avec un Lerp comme tu as fait (avec peut-être un float multiplicateur), puis dans un deuxième temps, lorsque la camera reprend sa position initiale, faire un autre Lerp.
Il faut , comme le dit MasterNovice, que tu mettes ces différentes valeurs dans des variables. Ensuite, soit tu limites ses valeurs (avec l'action "Clamp"), soit tu fais un "Float Compare" qui stoppe ta rotation lorsque la variable atteint une certaine valeur.
C'est une course a haute vitesse, la camera ne reprends jamais ca position initiale .. le Input est constant.
Toutes mes valeurs sont deja dans des variables .. pour l'instant j'utilise le lerp float de cette maniere: je stocke le mouvement et la rotation de l'image precedente dans des variables , puis celle de l'image actuelle dictee par le Input .. je lerp entre les 2 et j'utilise le resultat pour determiner le mouvement et la rotation courrante. Ca marche pas trop mal mais ca montre ces limites dans les brusques changement de direction.
Je vais faire des essais avec des clamp et des float compare pour voir ce que ca donne .. sinon je crois que je vais essayer quelque chose d'autre : determiner le mouvement grace a la rotation plutot que par le Axis Input.

merci pour ton aide thyriax :)

Répondre

Revenir vers « Vos Questions »