Arriver à contrôler le départ d'un objet sur une spline

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Skid
Messages : 14
Inscription : 29 Sep 2014 15:00

Arriver à contrôler le départ d'un objet sur une spline

Message par Skid » 29 Sep 2014 15:14

Bien le bonjour,

Comme dis dans ma présentation je suis un vrai novice :? du code et j'ai un soucis.

Comment puis-je faire pour pouvoir dire à un objet qui suis déjà une spline, de le faire s'animer à partir d'un moment que j'aurais moi même décidé ?

Merci beaucoup de votre aide ;)
VFX artist

Vimeo


Skid
Messages : 14
Inscription : 29 Sep 2014 15:00

Re: Arriver à contrôler le départ d'un objet sur une spline

Message par Skid » 30 Sep 2014 08:45

Salut,

Pour mes splines j'utilise SuperSplinePro
VFX artist

Vimeo

Avatar de l’utilisateur
pated
Messages : 146
Inscription : 25 Juil 2014 01:44
Contact :

Re: Arriver à contrôler le départ d'un objet sur une spline

Message par pated » 30 Sep 2014 12:50

Hello,

Alors c'est difficile de te répondre sans en savoir plus sur le contexte et sans connaître les possibilités du plug-in que tu utilises. Je suppose que tu as déjà cherché la fonctionnalité que tu recherches dans la documentation du plug-in donc je peux juste te donner une façon générique de faire la chose. :S

Si tes splines ne sont pas créées dynamiquement alors t'embête pas, utilise un collider en mode trigger à l'endroit voulu pour déclencher l'animation. Le mieux est de faire un collider sur gameObject vide, enfant de ta spline.

Si l'animation se passe quoiqu'il arrive dans un lieu défini et fixe dans la scène pour toutes tes splines, utilise le même trigger collider sans parent pour toutes les splines.

Se tes splines sont créées dynamiquement:

- utilise le temps pour activer l'anim si le mouvement de l'objet est continu.

- si tu veux faire ça par calcule de distance et que ton plug-in ne te donne aucune solution, même pas une référence des points utilisés pour tracer la spline, alors, si ta spline n'est pas excessivement anguleuse tu peux par exemple tricher en enregistrant dans une variable Vector3 un nouveau point dans l'espace à chaque fois que tu fais x distance (par exemple 1 mètre ou moins) depuis le dernier point, le premier point étant le départ de l'objet et le nouveau point étant à chaque fois la position actuelle de l'objet. Et tu incrémentes la distance ainsi. C'est qu'un exemple hein.
Une fois que tu as cumulé le nombre de mètres voulu tu actives l'anim.


Expliques dans quel contexte tu utilises tes splines pour qu'on puisse vraiment t'aider!

Avatar de l’utilisateur
pated
Messages : 146
Inscription : 25 Juil 2014 01:44
Contact :

Re: Arriver à contrôler le départ d'un objet sur une spline

Message par pated » 30 Sep 2014 13:01

Zut, je suis bête, si tu veux dire faire bouger l'objet au moment voulu il doit forcément y avoir un paramètre dans ton plug-in dédié à ça. Sois qui permet de lancer le mouvement ou au moins de le mettre en pause!
Sinon tu références le script de ton plug-in sur ton objet dans un autre script aussi placé sur ton objet qui va activer/désactiver le script du plug-in. Mais il doit obligatoirement y avoir une méthode directe via ton plug-in, c'est pas possible que le dev ne l'ait pas intégré.


Skid
Messages : 14
Inscription : 29 Sep 2014 15:00

Re: Arriver à contrôler le départ d'un objet sur une spline

Message par Skid » 30 Sep 2014 17:22

Merci beaucoup pour ces réponses je vais tester et je reviens faire un retour :)


EDIT :

Bon je n'ai pas trouvé mon bonheur, j’espère ne pas être passé à coté.... Exactement ce que j'aimerais, c'est pouvoir mettre une option qui me permet de donner a mon objet un temps de départ genre qu'il bouge au bout de 2secondes.
VFX artist

Vimeo

Avatar de l’utilisateur
pated
Messages : 146
Inscription : 25 Juil 2014 01:44
Contact :

Re: Arriver à contrôler le départ d'un objet sur une spline

Message par pated » 01 Oct 2014 05:48

D'après la doc, essaye:

Code : Tout sélectionner

using UnityEngine;
using SplineUtilities;

public class SplineAnimator : MonoBehaviour
{
        public Spline spline;
        
        public WrapMode wrapMode = WrapMode.Clamp;
        
        public float speed = 1f;
        public float offSet = 0f;
        
        public float passedTime = 0f;
        
        public float delay = 0f; //ton délai à définir dans l'éditeur
        private float delayedStartTime; //pour enregistrer le temps lors de la création de l'objet, important s'il n'apparaît pas au début de la scène (ex: instance)
        
        void OnEnable(){ delayedStartTime = Time.time + delay; }

        void Update(){

           if(Time.time > delayedStartTime ){
                passedTime += Time.deltaTime * speed;
                
                float clampedParam = SplineUtils.WrapValue( passedTime + offSet, 0f, 1f, wrapMode );
                
                transform.position = spline.GetPositionOnSpline( clampedParam );
                transform.rotation = spline.GetOrientationOnSpline( clampedParam );
           }
     }
}
Ou avec une coroutine:

Code : Tout sélectionner

using UnityEngine;
using SplineUtilities;

public class SplineAnimator : MonoBehaviour
{
        public Spline spline;
        
        public WrapMode wrapMode = WrapMode.Clamp;
        
        public float speed = 1f;
        public float offSet = 0f;
        
        public float passedTime = 0f;
        
        public float delay = 0f; //ton délai à définir dans l'éditeur
        private bool moveOnSpline = false; //boolean qui dit si oui ou non l'objet doit bouger
        
        void OnEnable(){

               StartCoroutine(StartMoveOnSpline());

        }

        void Update(){

                if(moveOnSpline){
                            passedTime += Time.deltaTime * speed;
                
                            float clampedParam = SplineUtils.WrapValue( passedTime + offSet, 0f, 1f, wrapMode );
                
                            transform.position = spline.GetPositionOnSpline( clampedParam );
                            transform.rotation = spline.GetOrientationOnSpline( clampedParam );
                }
        }

        IEnumerator StartMoveOnSpline(){

               yield return new WaitForSeconds(delay);

               moveOnSpline = true;

        }
}

Skid
Messages : 14
Inscription : 29 Sep 2014 15:00

Re: Arriver à contrôler le départ d'un objet sur une spline

Message par Skid » 01 Oct 2014 12:00

MERCI :D

C'est parfait il fonctionne très bien ton morceaux de code 8-) . Je pense que je reviendrais pour quelques autres questions :p concernant les particules... car la mon projet est d'arriver a faire suivre des particules sur une Spline. Pour le moment j'utilise un système lié à un GameObject qui lui même suit la Spline. Mais le soucis est que les particules ont une gravité de base et cela les empêchent de se coller à la Spline sur la fin de leur vie.



Je posterais surement plus tard un visuel pour partager le résultat ;)
VFX artist

Vimeo

Skid
Messages : 14
Inscription : 29 Sep 2014 15:00

Re: Arriver à contrôler le départ d'un objet sur une spline

Message par Skid » 01 Oct 2014 16:05

Re les gens, désolé de revenir avec ça mais le plugins Spline n'est pas vraiment au top puisqu'il me permet de créer que 4 nodes, pas plus ....

Première question, est il possible de modifier le code pour en rajouter ?

Si, non quelqu'un aurait la possibilité de faire un bout de script qui colle à ce plugin ITWEEN

Merci d'avance :)
VFX artist

Vimeo

Répondre

Revenir vers « Scripting »