émettre toutes les random secondes un random object

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
antho2b
Messages : 63
Inscription : 12 Juin 2010 19:09
Localisation : Nantes

émettre toutes les random secondes un random object

Message par antho2b » 12 Jan 2011 15:30

bonjour à tous !

Complétement ignorant de toute notion de script je tente, tant bien que mal de coder mes propres trucs !
en l'occurrence un émetteur de voiture dans une rue.
Le but est d'émettre une random voiture parmi ma liste, toutes les random secondes.
total, aprés peut-être 15 heures de taff réparties sur un moi je suis arrivé à ça :

Code : Tout sélectionner

var voitures : GameObject[];
// démarre aprés 1 seconde.
// lance un projectile toutes les random secondes


    InvokeRepeating("LaunchProjectile", 1, Random.Range(0, 3));


function LaunchProjectile () {
    Instantiate(voitures[Random.Range(0, voitures.Length)], transform.position, transform.rotation);
}

Malheureusement, il semblerait que unity n'ai pas du tout envie de devenir mon copain.
Si j'émets bien une random voiture, je n'arrive pas à émettre toutes les random secondes.... mon

Code : Tout sélectionner

Random.Range(0, 3)
est considéré comme dans un function Start.
Total à chaque fois que je lance le jeu le timing à laquelle l'émetteur émet une voiture est différent, mais il reste le même tout le long de la partie. Par exemple :
lancement du jeu 1:
random = 1sec
le jeu émet une voiture toutes les 1sec

lancement du jeu 2:
random = 2sec
le jeu émet une voiture toutes les 2sec

alors que moi je voudrais que le random se recalcule à chaque fois (en function update peut-etre?)
c'est à dire
lancement du jeu :
random = 1sec
le jeu émet une voiture au bout d'1sec
recalcul du random
random = 2sec
le jeu émet une voiture 2 sec après la dernière !

comment faire SVP ?

Avatar de l’utilisateur
Freelax
Messages : 1595
Inscription : 30 Déc 2009 23:02
Localisation : Niort
Contact :

Re: émettre toutes les random secondes un random object

Message par Freelax » 12 Jan 2011 15:34

salut!

C'est avec le Update qui faut le faire ;)

Code : Tout sélectionner

var voitures : GameObject[];
// démarre aprés 1 seconde.
// lance un projectile toutes les random secondes

function Update () {
InvokeRepeating("LaunchProjectile", 1, Random.Range(0, 3));
}
    
function LaunchProjectile () {
    Instantiate(voitures[Random.Range(0, voitures.Length)], transform.position, transform.rotation);
}
Test ca pour voir
Image

antho2b
Messages : 63
Inscription : 12 Juin 2010 19:09
Localisation : Nantes

Re: émettre toutes les random secondes un random object

Message par antho2b » 12 Jan 2011 15:38

Je vais (re)tester tout de suite mais je pense que ça marchera pas car là il va émettre àprés x temps à chaque update (autant dire en continu aprés x temps) et plus au bout de x temps toutes les x secondes !
c'est très clair non ?

mais je test !
En tous les cas réponse ultra rapide !

Avatar de l’utilisateur
Freelax
Messages : 1595
Inscription : 30 Déc 2009 23:02
Localisation : Niort
Contact :

Re: émettre toutes les random secondes un random object

Message par Freelax » 12 Jan 2011 15:42

sinon y'a le yield à mettre en plus du update

Code : Tout sélectionner

var voitures : GameObject[];

function Update () {
LaunchProjectile ();
yield WaitForSeconds ( Random.Range(0, 3));
}
   
function LaunchProjectile () {
    Instantiate(voitures[Random.Range(0, voitures.Length)], transform.position, transform.rotation);
}
Un truc dans le style ;)
Dernière édition par Freelax le 12 Jan 2011 15:44, édité 2 fois.
Image

antho2b
Messages : 63
Inscription : 12 Juin 2010 19:09
Localisation : Nantes

Re: émettre toutes les random secondes un random object

Message par antho2b » 12 Jan 2011 15:43

C'est ce que j'avais dit ! il fait un flot continu de voitures !
il faudrait que je réussise à différencier l'invoke repeating de son timing :
l'invoke se lance au function start

par contre son timing se recalcul à chaque update ou

Avatar de l’utilisateur
Freelax
Messages : 1595
Inscription : 30 Déc 2009 23:02
Localisation : Niort
Contact :

Re: émettre toutes les random secondes un random object

Message par Freelax » 12 Jan 2011 15:45

même avec ce que j'ai mis au dessus?

ou comme ca peu être:

Code : Tout sélectionner

var voitures : GameObject[];

function Update () {
LaunchProjectile ();
}
   
function LaunchProjectile () {
    Instantiate(voitures[Random.Range(0, voitures.Length)], transform.position, transform.rotation);
    yield WaitForSeconds ( Random.Range(0, 3));
}
Image

antho2b
Messages : 63
Inscription : 12 Juin 2010 19:09
Localisation : Nantes

Re: émettre toutes les random secondes un random object

Message par antho2b » 12 Jan 2011 15:50

Pas ça non plus :( ...
Si j'ajoute le yeld plus rien ne se passe... es-tu sure de l'orthographe du yield WaitForSeconds (1); ou du fait qu'il faille le mettre en update?

antho2b
Messages : 63
Inscription : 12 Juin 2010 19:09
Localisation : Nantes

Re: émettre toutes les random secondes un random object

Message par antho2b » 12 Jan 2011 16:01

Excuse tu postes tellement vite que j'ai toujours une réponse de retard !
J'ai donc essayé ça :

Code : Tout sélectionner

var voitures : GameObject[];

function Update () {
LaunchProjectile ();
}
   
function LaunchProjectile () {
    Instantiate(voitures[Random.Range(0, voitures.Length)], transform.position, transform.rotation);
    yield WaitForSeconds ( Random.Range(0, 3));
}
marche pô :cry:

antho2b
Messages : 63
Inscription : 12 Juin 2010 19:09
Localisation : Nantes

Re: émettre toutes les random secondes un random object

Message par antho2b » 12 Jan 2011 16:05

par contre :

Code : Tout sélectionner

// démarre aprés 1 seconde.
// lance un projectile toutes les random secondes
var voitures : GameObject[];

function Start () {
InvokeRepeating("LaunchProjectile", 1, Random.Range(0, 3));
yield WaitForSeconds (2);
InvokeRepeating("LaunchProjectile", 1, Random.Range(0, 7));
}
   
function LaunchProjectile () {
    Instantiate(voitures[Random.Range(0, voitures.Length)], transform.position, transform.rotation);
}
ça ça donne l'effet que je veux sur les 2 premiers véhicules :
random sec on attend 2 sec puis random sec (mais aprés ça répéte le dernier random)
ton yield est cool mais il faudrait que j'arrive à faire une boucle permanente invoke repeating -> yeld for seconds -> invoke...

Avatar de l’utilisateur
spedy
Messages : 290
Inscription : 16 Nov 2010 16:32
Localisation : Aix en Provence

Re: émettre toutes les random secondes un random object

Message par spedy » 12 Jan 2011 16:10

A tester :

Code : Tout sélectionner

function Start(){
     launchCar();
}

function launchCar(){
    Instantiate(voitures[Random.Range(0, voitures.Length)], transform.position, transform.rotation);
    WaitNextCar(); 
}

function WaitNextCar(){
      yield WaitForSeconds (Random.Range(0, 3));
      launchCar();
}

Répondre

Revenir vers « Scripting »