Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 15,00€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
Mega

Ayuda acript de disparo

Recommended Posts

Hola, quiero hacer que se dispare un objeto cada dos segundos pero lo que he conseguido es que a los dos segundo tire el objeto pero no uno ,dispara como una metralleta.Solo quiero que cada dos segundos dispare uno.

Gracias de antemano.

pragma strict

var projectile : Rigidbody;
var TiempoDisparo : float;
var speed = -7;

function Start () {
    
}

function Update () {

  disparador();
}

function disparador(){
  yield WaitForSeconds(TiempoDisparo);
    var instantiatedProjectile : Rigidbody = Instantiate(
   projectile, transform.position, transform.rotation );
  instantiatedProjectile.velocity =
   transform.TransformDirection( Vector3( speed, ,  ) );
  Physics.IgnoreCollision( instantiatedProjectile. GetComponent.<Collider>(),
   transform.root.GetComponent.<Collider>() );

}

 

Edited by Mega
Has incumplido 1 norma de la Comunidad. Ten cuidado

Share this post


Link to post
Share on other sites

A ver. El problema es que lo llamas a través de Update(), que se ejecuta en cada frame (le pones yield, pero si lo ejecutas en cada frame solo desplazas el tiempo inicial,,,). Te dejo la documentación  de unity3d:

https://docs.unity3d.com/ScriptReference/WaitForSeconds.html

 

Hay muchas formas de hacer esto. Tienes yield en tu propia coroutine o una variable de tiempo propia. Esta última simplemente consiste en una variable que pones a TiempoDisparo. Al disparar reduces esta variable en update a time.deltaTime hasta que llegue a cero. Entonces la reinicias y se realiza un disparo.

Share this post


Link to post
Share on other sites

Si, yo haria lo de la variable como dice @marcoscuro1

Definiria una variable float para contar el tiempo y quitaria lo de yield WaitForSeconds ya que es innecesario al contar el tiempo con una variable definida

Ej:


....
var tiempoDisparo: float; 
//tiempo en segundos entre cada disparo

var tiempoTrancurrido = 0f;
//variable para contar el tiempo

....

function Update() {
   tiempoTranscurrido = tiempoTranscurrido + Time.timeDelta;
   //sumar el tiempo transcurrido

   if (tiempoTranscurrido > tiempoDisparo) {
      tiempoTranscurrido = 0;
      // resetear el tiempo

      disparador();
   }
}

...

//y en la funcion disparador borrar la linea de "yield"

 

Share this post


Link to post
Share on other sites

No es mas facil algo asi?

var espera : boolean;

function Start(){
	espera = false;
}

function Update(){
	if(espera == false){
    	Disparar();
		espera = true;
    }
}

function Disparar(){
	//haces todo tu codigo de disparo
	//Al final del codigo pones esto
  	yield WaitForSeconds(2);
	espera = false;
}

asi, comprobas siempre si espera es falso, si lo es, te vas a la funcion disparar, mientras tanto, pones espera en verdadero, haces todo tu codigo de disparo, cuando terminas, le decis que espere 2 segundos y al finalizar pones espera en falso de nuevo, para que vuelva a realizar el disparo...

Tambien podes cambiar el 2 por una variable y decirle que espera tanto tiempo como diga la variable --> yield WaitForSeconds(variable); <--

No se, es otra idea, y te ahorras todo el procesamiento de andar sumando y contando tiempo...

Share this post


Link to post
Share on other sites
hace 1 minuto, arjmaj said:

No es mas facil algo asi?


var espera : boolean;

function Start(){
	espera = false;
}

function Update(){
	if(espera == false){
    	Disparar();
		espera = true;
    }
}

function Disparar(){
	//haces todo tu codigo de disparo
	//Al final del codigo pones esto
  	yield WaitForSeconds(2);
	espera = false;
}

asi, comprobas siempre si espera es falso, si lo es, te vas a la funcion disparar, mientras tanto, pones espera en verdadero, haces todo tu codigo de disparo, cuando terminas, le decis que espere 2 segundos y al finalizar pones espera en falso de nuevo, para que vuelva a realizar el disparo...

Tambien podes cambiar el 2 por una variable y decirle que espera tanto tiempo como diga la variable --> yield WaitForSeconds(variable); <--

No se, es otra idea, y te ahorras todo el procesamiento de andar sumando y contando tiempo...

Muchísimas gracias

Share this post


Link to post
Share on other sites

@Mega, estás incumpliendo varias normas de la Comunidad:

  • Poner de título del tema algo confuso o poco claro. Por favor, corrígelo y explica mejor qué necesitas.
  • Poner un título de tema en Mayúsculas, como si gritaras. Acostúmbrate a escribir normalmente, por favor.
  • No usar los <> y "Quote", para pegar código: Te mandé un mensaje con las buenas prácticas de la Comunidad cuando te registraste. Apréndetelas bien, por favor.

 

Los próximos temas o mensajes que no cumplan estas normas serán borrados sin explicación alguna.

Share this post


Link to post
Share on other sites
hace 53 minutos, pioj said:

@Mega, estás incumpliendo varias normas de la Comunidad:

  • Poner de título del tema algo confuso o poco claro. Por favor, corrígelo y explica mejor qué necesitas.
  • Poner un título de tema en Mayúsculas, como si gritaras. Acostúmbrate a escribir normalmente, por favor.
  • No usar los <> y "Quote", para pegar código: Te mandé un mensaje con las buenas prácticas de la Comunidad cuando te registraste. Apréndetelas bien, por favor.

 

Los próximos temas o mensajes que no cumplan estas normas serán borrados sin explicación alguna.

Lo siento mucho mucho , lo tendré en cuenta la próxima vez

Share this post


Link to post
Share on other sites
On 17/8/2017 at 2:10, arjmaj said:

No es mas facil algo asi?


var espera : boolean;

function Start(){
	espera = false;
}

function Update(){
	if(espera == false){
    	Disparar();
		espera = true;
    }
}

function Disparar(){
	//haces todo tu codigo de disparo
	//Al final del codigo pones esto
  	yield WaitForSeconds(2);
	espera = false;
}

asi, comprobas siempre si espera es falso, si lo es, te vas a la funcion disparar, mientras tanto, pones espera en verdadero, haces todo tu codigo de disparo, cuando terminas, le decis que espere 2 segundos y al finalizar pones espera en falso de nuevo, para que vuelva a realizar el disparo...

Tambien podes cambiar el 2 por una variable y decirle que espera tanto tiempo como diga la variable --> yield WaitForSeconds(variable); <--

No se, es otra idea, y te ahorras todo el procesamiento de andar sumando y contando tiempo...

Muchas gracias funciona perfectamente.Mis dieses

 

Share this post


Link to post
Share on other sites

×
×
  • Create New...