Jump to content
UnitySpain
Lucho31

¿Activar un objeto despues de unos segundos?

Recommended Posts

Hola chicos, veran, he tratado de escribir un codigo el cual me permita desactivar un objeto presionando una tecla y que despues de algunos segundos este objeto vuelva a acivarse, con documentacion escribi algo asi:

using UnityEngine;
using System.Collections;

public class Activate : MonoBehaviour {
    public GameObject Crosshair;

    void Start (){
        if (Input.GetButtonDown ("Reload"))
            ;
        {
            Crosshair.gameObject.SetActive (false);
        }
    }

     void ModeSelect(){
        StartCoroutine("Wait");
        
    }
    
    IEnumerator Wait()
    {
        yield return new WaitForSeconds(5);
        
        Crosshair.gameObject.SetActive (true);
    }
}

 

 

El cual no me da ningun error, pero no me funciona en absoluto.
No soy muy bueno programando debido a que no llevo mucho tiempo con Unity y estoy aprendiendo de forma autodidacta...

¿Como podria lograr realizar lo que necesito?
Me vendria muy bien su ayuda, les agradeceria tanto que me pudieran ayudar.

Share this post


Link to post
Share on other sites

Cual es el botón "reload"?? La función start se ejecuta una sola vez al principio del nivel, debes poner la condición en el Update(), la función ModeSelect tienes que llamarla en algún momento para que se ejecute, puedes ponerla después de desactivar el objeto.

Share this post


Link to post
Share on other sites

@juanma_teso

El boton reload es la tecla R, lo puse asi ya que desde el input asi lo nombre...

¿podrias explicarme mas sobre la funcion ModeSelect?

Te lo agradeceria mucho,

Share this post


Link to post
Share on other sites

Tenes una funcion que nunca es llamada, luego de desactivar el objeto deberias llamarla mediante ModeSelect, creo que deberias aprender las bases de programacion para continuar sin tropiezos, y claro sobre la api de Unity ya que eso deberia estar dentro del Update.

Share this post


Link to post
Share on other sites

@juanma_teso

El boton reload es la tecla R, lo puse asi ya que desde el input asi lo nombre...

¿podrias explicarme mas sobre la funcion ModeSelect?

Te lo agradeceria mucho,

pero pues la funcion ModeSelect tu la escribiste, a ver sin nada de codigo,

explicanos como funciona tu codigo n__n de ahi partimos , saludos

Share this post


Link to post
Share on other sites

pero pues la funcion ModeSelect tu la escribiste, a ver sin nada de codigo,

explicanos como funciona tu codigo n__n de ahi partimos , saludos

No lo escribi exactamente yo, por eso dije que con documentacion lo escribi...

Pues basicamente la funcion del codigo seria que al presionar el boton "Reload", osease R
la variable Crosshair se desactivaria, desactivando al GameObject que en ella esta
y despues de unos segundos, esta volveria a activarse...

Se que esta mal algo en el codigo, pero no logro comprender que es debido a que mis conocimientos son pocos

Share this post


Link to post
Share on other sites

No lo escribi exactamente yo, por eso dije que con documentacion lo escribi...
Pues basicamente la funcion del codigo seria que al presionar el boton "Reload", osease R
la variable Crosshair se desactivaria, desactivando al GameObject que en ella esta
y despues de unos segundos, esta volveria a activarse...

Se que esta mal algo en el codigo, pero no logro comprender que es debido a que mis conocimientos son pocos

oks entonces a ver, cual es la diferencia entre los metodos Awake, Start , Update, FixedUpdate ? investiga un poco de eso y me respondes y de ahi le seguimos, te prometo que al final encontras la solicion :) , solo ten paciencia y veme contestando las preguntas n_n saludos. 

 

Share this post


Link to post
Share on other sites

La función ModeSelect no es una función especial ni nada del estilo, es una función que tú has creado, esa función hace lo que tú le ordenes en las líneas que lleve dentro, esa función la debes llamar en algún momento para que se ejecute. Primero te diré que si quieres tomar los videojuegos como hobby o como algo un poco serio, aprendas a programar o diseñar, a veces en el foro olvidamos que no todo es código jaja, segundo, los fallos que tienes es que estás usando mal las funciones del MonoBehaviour, se ve que por lo menos has intentado hacerlo por tu cuenta, lo que debes hacer es poner las líneas que tienes en el Start() dentro del Update(), dentro de la condicional que has hecho, puedes poner tantas líneas como quieras, en la primera desactivas el objeto, que no la variable, en una segunda línea llamas la función ModeSelect(), que a su vez empezará la corrutina Wait().

Share this post


Link to post
Share on other sites

Asi es como posiblemente quedaria tu codigo segun lo que dices (timeR es el tiempo para la activacion):

var Crosshair : GameObject;
var timeR : float = 2.0f

function Update () {
      if(Input.GetKeyDown("Reload")){
          Crosshair .SetActive(false);
          Invoke("ActivateNow", timeR);
    }
}

function ActivateNow () {
   Crosshair .SetActive(true);
}

 

     

Share this post


Link to post
Share on other sites

×
×
  • Create New...