Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Llamar a una funcion cada x tiempo y otra duda

Iniciado por Gastonspas, Mayo 10, 2016, 06:06:58 AM

Tema anterior - Siguiente tema
Mayo 10, 2016, 06:06:58 AM Ultima modificación: Mayo 10, 2016, 06:20:13 AM por Gastonspas
Hola muy buenas a todos hoy les vengo a hacer una pregunta rapida como puedo llamar a una funcion dps de 2 segundos ej : 
function Update () {
 if(Input.GetKeyDown(KeyCode.R)){
        ani1.enabled = true;
        ani2.enabled = true;
        recargando = 1;
        recarga();
    }
}
function recarga(){
    ani1.enabled = false;
    ani2.enabled = false;
    recargando = 0;
}

y la otra duda como saco esto :
Assets/FPSSSSSSSSS/Scrips/Disparador.js(55,16): BCW0012: WARNING: 'UnityEngine.GameObject.active' is obsolete. GameObject.active is obsolete. Use GameObject.SetActive(), GameObject.activeSelf or GameObject.activeInHierarchy.
var efect1 : GameObject;
efect1.active = false;

Utiliza Couroutinas http://docs.unity3d.com/Manual/Coroutines.html
Y el warning es porque debes utilizar SetActive (ya no se usa como tu lo estas haciendo)
ej: ani1.setActive(true);

[quote author=GSG3D" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35834" data-ipsquote-contentcommentid="130708">Utiliza Couroutinas http://docs.unity3d.com/Manual/Coroutines.html">http://docs.unity3d.com/Manual/Coroutines.html
Y el warning es porque debes utilizar SetActive (ya no se usa como tu lo estas haciendo)
ej: ani1.setActive(true);Eso lo habia leido antes pero no se como aplicarlo por que eh intendado StartCoroutine ( "recarga", 2,0);

Mayo 11, 2016, 02:17:28 AM #3 Ultima modificación: Mayo 11, 2016, 02:21:34 AM por ¥-Shido
[quote author=Gastonspas" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35834" data-ipsquote-contentcommentid="130745"> [/quote]Esas comillas no van :vEs así:
								

Mayo 11, 2016, 02:32:06 AM #4 Ultima modificación: Mayo 11, 2016, 12:18:21 PM por pioj
[quote author=¥-Shido" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35834" data-ipsquote-contentcommentid="130746">Esas comillas no van :vEs así:
								

la funcion de corutina tiene q retornar un ienumerable

[quote author=Gastonspas" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35834" data-ipsquote-contentcommentid="130747">Assets/FPSSSSSSSSS/Scrips/Disparador.js(75,35): BCE0023: No appropriate version of 'UnityEngine.MonoBehaviour.StartCoroutine' for the argument list '(void)' was found.StartCoroutine(recarga(2.0));function recarga(Float){
    ani1.enabled = false;
    ani2.enabled = false;
    recargando = 0;
    Balas += a;
}[/quote]Es que tu función recarga no es una corrutina -.-Una corrutina es: una función declarada con un tipo de retorno IEnumerator y con una instrucción de retorno yield incluida en algún lugar de su cuerpo. La linea con la instrucción de retorno yield es el punto en el cual la ejecución se pausará y reanudará en el siguiente frame. 

Alguien me daría un ej : de que al presionar x botón después de 10 segundos llame otra función.así lo entiendo mejor se lo agradezco de mano muchas gracias por leer y espero no haberte molestado

Si buscarías las funciones que te estamos mencionando..en fin un ejemplo:
void Update()
{
    if (trigger == true)
        transform.Translate(Vector3.right * Time.deltaTime); //This moves the GameObject to the right
}

void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10, 50, 50), "Dance"))
        {  
           StartCoroutine(DoTheDance());
        }
    }


 public IEnumerator DoTheDance() {
    trigger = false;
    yield return new WaitForSeconds(3f); // waits 3 seconds
    trigger = true; // will make the update method pick up
 }
 

Mayo 12, 2016, 04:50:35 AM #9 Ultima modificación: Mayo 17, 2016, 07:12:34 PM por pioj
No me funciona
 



   
       
   
   
      Assets/FPSSSSSSSSS/Scrips/Disparador.js(78,23): BCE0044: expecting (, found 'recarga'.
   
   
      Assets/FPSSSSSSSSS/Scrips/Disparador.js(78,30): BCE0044: expecting EOF, found '('.
   
   
       
   

[/quote]

// Bala
var proyectil : Rigidbody;
var sonidoDisparo : AudioClip;
var velocidadProyectil : float=100.0;
// Tiempo De Disparo
private var nextFire = 0.0;
var fireRate = 0.08;
// animacion
var ani : Animator;
var ani1 : Animator;
var ani2 : Animator;
// Recarga
private var recargando = ;
var sonido_recarga : AudioClip;
// Contador de balas
//var Balas = 30;
var Balas_Recarga = 90;
var Balas : int;
 
// Efectos
var efect1 : GameObject;
function Start () {
    ani.enabled = false;
    efect1.active = false;
    ani1.enabled = false;
    ani2.enabled = false;
}
function Update () {
    
    if (Input.GetButton ("Fire1")&& Time.time > nextFire){
        if (Balas > ) 
        {
            if (recargando == )
            {
                nextFire = Time.time + fireRate;
                var bala:Rigidbody = Instantiate ( proyectil,transform.position,transform.rotation);
                bala.velocity = transform.TransformDirection(Vector3(,,velocidadProyectil));
                Physics.IgnoreCollision(bala.GetComponent.<Collider>(),transform.root.GetComponent.<Collider>());
                GetComponent.<AudioSource>().PlayOneShot (sonidoDisparo);
                ani.enabled = true;
                efect1.active = true;
                Balas -= 1;
            }
        }
    }
    if (Input.GetButtonUp ("Fire1")) 
    {
        ani.enabled = false;
        efect1.active = false;
    }
    if (Balas < 1){
        ani.enabled = false;
        efect1.active = false;
    }
    if(Input.GetKeyDown(KeyCode.R)){
        var a = 30 - Balas;
        if (Balas < 30)
        {
            if (Balas_Recarga >= a)
            {
                if (Balas + a <= 30)
                {
                    StartCoroutine(recarga());
                }
            }
        }
    }
}
function IEnumerator  recarga(){
    ani1.enabled = true;
    ani2.enabled = true;
    //recargando = 1;
    Balas_Recarga -= a;
    GetComponent.<AudioSource>().PlayOneShot (sonido_recarga);
    Balas += a;
    yield return new WaitForSeconds(3f);
    ani1.enabled = false;
    ani2.enabled = false;
    recargando = ;
}
function OnGUI () 
{
    GUI.Label (Rect (,,150,100), "Balas : " + Balas + " Recarga : " + Balas_Recarga);
} 

 
 

Cita de: GSG3D date=1462854654" data-ipsquote="" data-cite="GSG3DNo he mirado nada más, ¿Pero donde has visto que en el ejemplo de GSG3D ponga Function delante de IEnumerator??
No he mirado nada más, ¿Pero donde has visto que en el ejemplo de GSG3D ponga Function delante de IEnumerator?


Mayo 24, 2016, 05:05:32 AM #12 Ultima modificación: Mayo 24, 2016, 05:06:25 AM por KarmaLP
También puedes usar un Invoke, para simplemente llamar un método pasados x segundos es más sencillo que montar una corrutina 
 
http://docs.unity3d.com/ScriptReference/MonoBehaviour.Invoke.html
 
Y si además quieres repetirlo después de llamarlo la primera vez (por ejemplo la 1º vez a los 5 segundos y luego repetirlo cada 10) tienes el InvokeRepeating
 
http://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.html
 
con su correspondiente cancel invoke para pararlo en caso de que quieras que deje de repetirse
 
http://docs.unity3d.com/ScriptReference/MonoBehaviour.CancelInvoke.html
 
Un saludo!

Etiquetas: