[JS] Deplacement de GameObject

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
IronBatcher
Messages : 13
Inscription : 20 Avr 2016 18:34
Localisation : Brest

[JS] Deplacement de GameObject

Message par IronBatcher » 30 Avr 2016 13:47

3e post !

Bonjour,

J'ai un peu chercher mais je n'ai pas vraiment trouvé de réponse a mon problème :
Déplacer un GameObject a une position random dans un rayon donné tous les X temps (ça ne veut pas dire grand chose mais je ne savais pas comment formuler :oops: ), ça, c'est bon, mais faire en sorte que le GameObject n’atterrisse pas à l'extérieur du terrain je n'ai pas trouvé.

Script :

Code : Tout sélectionner

#pragma strict 

function Update () { 
    var timer : float = Random.Range(0,10); 
    var xpos = Random.Range(-5,10);
    var ypos = Random.Range(0,1); 
    var zpos = Random.Range(-5,20); 
    if(timer > 0){
        timer -= Time.deltaTime;
    } else{
        transform.Translate(xpos,ypos,zpos);
    }
} 

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [JS] Deplacement de GameObject

Message par Moi 1971 » 01 Mai 2016 10:59

Bonjour,
La fonction Update() est appelée à intervalle régulier. Elle doit obligatoirement se terminer avant le prochain appel à Update().
Donc, une première chose : "var timer : float = Random.Range(0,10); " ça pourra pas marcher comme tu fais!
Pour expliquer, prenons l'exemple que update() est appelée 25 fois par seconde. Ce qui laisse un temps d’exécution pour chaque Update() de 1/25 seconde = 0.04 seconde max. Donc jamais tu pourras avoir un timer qui ait pour valeur 1 seconde par exemple.
Pas à pas, ça donne ça :
*Premier appel à Update()
=> Random du timer = 2 secondes
=> Le if dit que timer > 0 => On enlève au timer le temps qui s'est écoulé depuis le début de d'exécution de CET appel à Update()
=> timer = 2 - 0.01 = 1.99
=> Fin de Update() => tout est détruit en mémoire (toutes les valeurs qui viennent d'être utilisées ici), on attend le prochain appel à la fonction Update() qui devrait avoir lieu dans ... 0.03 seconde..

*Deuxième appel à Update() ... ce qui veut dire que 0.04 seconde s'est écoulé.
=> Random du timer = 4 secondes NOUVELLE VALEUR POUR timer, ON RECOMMENCE TOUT
=> Le if dit que timer > 0 => On enlève au timer le temps qui s'est écoulé depuis le début de d'exécution de CET appel à Update()
=> timer = 4 - 0.01 = 3.99
=> Fin de Update() => tout est détruit en mémoire (toutes les valeurs qui viennent d'être utilisées ici), on attend le prochain appel à la fonction Update() qui devrait avoir lieu dans ... 0.03 seconde..

*Troisième appel à Update() ... ce qui veut dire que 0.04 seconde s'est écoulé.
ETC,
ETC,
Etc,
etc.
..
.

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

Re: [JS] Deplacement de GameObject

Message par boubouk50 » 02 Mai 2016 09:21

Tu peux utiliser la fonction Invoke () qui te permet d'appeler une fonction après un temps défini ou InvokeRepeating ()mais là le délai est régulier.
Ensuite il te faut simplement borner correctement ta zone. Il faut déterminer les minimums et maximums selon chaque axe.
"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

Verrouillé

Revenir vers « (Js) Javascript »