Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Gastonspas en Mayo 10, 2016, 06:06:58 AM

Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: Gastonspas en Mayo 10, 2016, 06:06:58 AM
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;
Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: GSG3D en Mayo 10, 2016, 06:30:54 AM
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);
Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: Gastonspas en Mayo 11, 2016, 12:52:19 AM
[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
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); Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: B-£otus en Mayo 11, 2016, 02:17:28 AM
[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í:
				Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: Gastonspas en Mayo 11, 2016, 02:32:06 AM
[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í:
				Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: Braltor en Mayo 11, 2016, 02:53:37 AM
la funcion de corutina tiene q retornar un ienumerable
Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: B-£otus en Mayo 11, 2016, 02:54:41 AM
[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.  Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: Gastonspas en Mayo 11, 2016, 06:22:05 AM
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
Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: GSG3D en Mayo 11, 2016, 07:08:48 AM
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
 }
 
Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: Gastonspas en Mayo 12, 2016, 04:50:35 AM
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);
} 

 
 
Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: J_L en Mayo 12, 2016, 07:37:28 AM
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?
Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: iRobb en Mayo 17, 2016, 03:04:18 AM
Está utilizando javascript.
Título: Llamar a una funcion cada x tiempo y otra duda
Publicado por: KarmaLP en Mayo 24, 2016, 05:05:32 AM
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 (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 (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 (http://docs.unity3d.com/ScriptReference/MonoBehaviour.CancelInvoke.html)
 
Un saludo!