ReverseFlow() ?

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
stcp
Messages : 65
Inscription : 07 Mai 2011 08:24

ReverseFlow() ?

Message par stcp » 03 Juin 2024 22:36

Bonjour à vous tous, quelqu'un aurais des exemples sur l'utilisation de la fonction spline ReverseFlow via un script ?
J'ai compris comment l'utiliser dans l'éditeur pour inverser le sens de direction de Spline Animation, mais rien trouver en script C#.

Ma spline contient que 2 points, je veut juste inverser la direction d'animation
Merci !

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

Re: ReverseFlow() ?

Message par Max » 04 Juin 2024 13:05

Bonjour,,

tu trouveras par mal d'info ici -> Building better paths while maintaining creative flow with Splines in 2022.2

Concernant la partie script, tu peux te référer à la partie API de la doc -> Spline API documentation
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

stcp
Messages : 65
Inscription : 07 Mai 2011 08:24

Re: ReverseFlow() ?

Message par stcp » 04 Juin 2024 19:50

Merci de m'avoir répondu max.
Mais j'ai déjà gratté sur ces liens et, aucun exemple sur l'utilisation de cette fonction qui sert à inverser le sens d'animation.
Je me trompe peut-être sur son l'utilisation. Je cherche juste à inverser le sens d'animation de l'objet qui suit cette spline.
Je ne pensais pas que ce soit aussi galère pour trouver des infos pour une simple action comme celle-ci.
Pourtant, il y a l'option pong dans l'animation de Spline Animation. Un reverse pilotable dois bien être possible.

Je continue à chercher.

stcp
Messages : 65
Inscription : 07 Mai 2011 08:24

Re: ReverseFlow() ?

Message par stcp » 07 Juin 2024 19:57

Retour de petite experience sur l'inversion de sens d'animation d'une spline.

La fonction ReverseFlow() -> pas réussi a l'utiliser correctement ( je pense)
Du coup, j'ai fait autrement en utilisent la fonction SetKnot() ci-dessous :

Code : Tout sélectionner

 if (moveToZone)
        {
            chariotPosition = cableAnimator.transform.position;
            
            if (!finDechargement)
            {
                var newPlotPos = new Vector3(buildingManager.dataManager.plot.transform.position.x, chariotPosition.y, buildingManager.dataManager.plot.transform.position.z);
                var newSiLoPos = new Vector3(silPos.x, chariotPosition.y, silPos.z);

                var knot0 = _splineContainerChariot.Spline.ToArray()[0];
                var knot1 = _splineContainerChariot.Spline.ToArray()[1];

                knot0.Position = _splineContainerChariot.transform.InverseTransformPoint(chariotPosition);
                knot1.Position = _splineContainerChariot.transform.InverseTransformPoint(newPlotPos);
                
                _splineContainerChariot.Spline.SetKnot(0, knot0);
                _splineContainerChariot.Spline.SetKnot(1, knot1);
                cableAnimator.transform.position = newSiLoPos;
                _splineAnimateChariot.ElapsedTime = 0;
                finDechargement = true;
            }
            
            _splineAnimateChariot.Play();

            zDistChariot = Mathf.Abs(_splineAnimateChariot.ElapsedTime - _splineAnimateChariot.Duration);

            moveToZone = zDistChariot > 0.1f;
            descent = !moveToZone;
            finDechargement = moveToZone;
        }
        
         _splineAnimateChariot.Play();

            zDistChariot = Mathf.Abs(_splineAnimateChariot.ElapsedTime - _splineAnimateChariot.Duration);
            moveToZone = zDistChariot > 0.1f;
            finDechargement = moveToZone;
        
chariotPosition : position actuel de l'objet cableAnimator à animer
newPlotPos : destination souhaitée
knot0 : point de départ de la spline
knot1 : point d'arrivée de la spline

knot0.Position et knot1.Position ( je donne une nouvelle position au points)
SetKnot(0, knot0) et SetKnot(1, knot1) j'applique les nouvelles positions
cableAnimator.transform.position = newSiLoPos : je reposition mon objet car il se teleporte à la nouvelle position
.ElapsedTime = 0 : reset du temps passé l'animation

Bon, c'est peut-etre un peut bricolage mais sa à le merite de fonctionner. 8-)

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

Re: ReverseFlow() ?

Message par boubouk50 » 10 Juin 2024 09:15

Et il n'y a pas moyen de jouer l'animation à l'envers en mettant la speed à -1 et commençant l'animation avec un Time à 1 ?
"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

stcp
Messages : 65
Inscription : 07 Mai 2011 08:24

Re: ReverseFlow() ?

Message par stcp » 10 Juin 2024 19:20

Bonjour boubouk50.
J'y avais bien pensé aussi, partant du principe d'animation contrôler. Mais on ne peut renseigner de vitesse négative dans l'inspecteur, il met le speed à 0 systématiquement. :naah:

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

Re: ReverseFlow() ?

Message par boubouk50 » 11 Juin 2024 08:37

Etrange, je ne vois pas pourquoi, perso.

Sinon, la doc donne le truc : https://docs.unity3d.com/Packages/com.u ... -flow.html
  • Inverser les knots dans le tableau (le premier devient le dernier)
  • Intervertir les In et Out des tangentes Bézier.
"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

stcp
Messages : 65
Inscription : 07 Mai 2011 08:24

Re: ReverseFlow() ?

Message par stcp » 12 Juin 2024 00:12

(Inverser les knots), s'est ce que j'ai fait justement. Mais faut pas oublier de replacer l'object, sinon il suit la position du knots inversé et se retrouve au point de depart !

Répondre

Revenir vers « Scripting »