Jump to content
UnitySpain
Sign in to follow this  
Lucky-chan

ANSWERED Problema con funcionamiento de script(Resuelto)

Recommended Posts

Buenas, aquí yo otra vez.

Esta vez he tenido un pequeño problema, la script que adjuntaré a continuación según yo no tiene errores pero al presionar el botón "F" no sucede nada... he puesto un Print para comprobar si las instrucciones llegan a ese punto y nop, no detecta cuando presiono el botón, la verdad me he estado comiendo la cabeza por media hora y no entiendo por que no funciona, probablemente sea una tontería pero no lo veo...

Aparte si tienen consejos para no usar tantos "if" lo agradecería ya que no tengo idea de si hay otra forma.

Gracias de antemano

    public GameObject Text;
    public GameObject Player;
    public GameObject Illumination;
    private bool ON = false;
    private AudioSource Tuturu;
    private GameObject Kill;
    public GameObject Tuturu2;
    // Start is called before the first frame update
    void Start()
    {
        Illumination = GameObject.FindGameObjectWithTag("Lights");
        Text = GameObject.FindGameObjectWithTag("Action");
        Player = GameObject.FindGameObjectWithTag("Player");
        Tuturu = GameObject.FindGameObjectWithTag("Sound").GetComponent<AudioSource>();
        Kill = GameObject.FindGameObjectWithTag("MarkedForDelete");
        Illumination.SetActive(false);
        Text.SetActive(false);
    }
    void OnTriggerEnter(Collider Col)
    {
        if (ON == false)
        {
            if (Input.GetKeyDown(KeyCode.F))
            {
                print("Activated");
                Tuturu.Play();
                Illumination.SetActive(true);
                ON = true;
                Kill.SetActive(false);
                Tuturu2.SetActive(false);
                Destroy(this);
            }
            Text.SetActive(true);
        }

    }
    void OnTriggerExit(Collider Col)
    {
        if (ON == false)
        {
            Text.SetActive(false);
        }
    }


}

 

Edited by Lucky-chan

Share this post


Link to post
Share on other sites

Pero para que la F funcione tiene que entrar en el collider y que esté marcado como trigger. Esa situación será casi ínfima de tiempo. El OnTriggerStay sería más apropiado.

Share this post


Link to post
Share on other sites
1 hour ago, iRobb said:

Pero para que la F funcione tiene que entrar en el collider y que esté marcado como trigger. Esa situación será casi ínfima de tiempo. El OnTriggerStay sería más apropiado.

ah... claro, si lo dejo así entonces solo podría presionar la F al entrar y no al mantenerme dentro .-. gracias xd

Share this post


Link to post
Share on other sites

Hola Lucky-chan.

 

El problema está en la función que estás usando para comprobar la pulsación de la tecla F. En Unity hay 3 funciones en lo que se refiere a colisiones, (3 para triggers y otras 3 para colisiones, pero centrándonos en los triggers).

 

OnTriggerEnter
OnTriggerStay
OnTriggerExit

Has puesto un código para comprobar la tecla F en el OnTriggerEnter, esta función sólo se activa en 1 frame, el frame en el que el objeto entra dentro del trigger, (Luego debe ser muy complicado pulsar la tecla F justo en ese pequeño momento). Utiliza OnTriggerEnter cuando tengas que inicializar cosas, (activar 1 enemigo, dar la orden de abrir una puerta, etc...)

Pero tu necesitas colocar ese párrafo de la tecla F en el OnTriggerStay, esta función se activa en todos los frames mientras el objeto de turno está dentro del trigger, entonces sí se ejecutará el if que comprueba la pulsación de la tecla durante un tiempo más asequible para el usuario.  

(GetKeyDown se comporta igual que OnTriggerEnter, su contenido sólo se activará en el frame dónde la tecla pasa de no estar pulsada, a ser pulsada, así que no habrá problema en este caso, pero recuerda que las cosas de OnTriggerStay, funcionan como un "update" lo que esté ahí se ejecutará en varios frames, no podrías poner cosas como la activación de 1 enemigo ya que fácilmente se podrían activar 60 en 1 segundo).

Por eso están las 3 variantes. :)

Edited by Antonio

Share this post


Link to post
Share on other sites
15 hours ago, Antonio said:

Hola Lucky-chan.

 

El problema está en la función que estás usando para comprobar la pulsación de la tecla F. En Unity hay 3 funciones en lo que se refiere a colisiones, (3 para triggers y otras 3 para colisiones, pero centrándonos en los triggers).

 

OnTriggerEnter
OnTriggerStay
OnTriggerExit

Has puesto un código para comprobar la tecla F en el OnTriggerEnter, esta función sólo se activa en 1 frame, el frame en el que el objeto entra dentro del trigger, (Luego debe ser muy complicado pulsar la tecla F justo en ese pequeño momento). Utiliza OnTriggerEnter cuando tengas que inicializar cosas, (activar 1 enemigo, dar la orden de abrir una puerta, etc...)

Pero tu necesitas colocar ese párrafo de la tecla F en el OnTriggerStay, esta función se activa en todos los frames mientras el objeto de turno está dentro del trigger, entonces sí se ejecutará el if que comprueba la pulsación de la tecla durante un tiempo más asequible para el usuario.  

(GetKeyDown se comporta igual que OnTriggerEnter, su contenido sólo se activará en el frame dónde la tecla pasa de no estar pulsada, a ser pulsada, así que no habrá problema en este caso, pero recuerda que las cosas de OnTriggerStay, funcionan como un "update" lo que esté ahí se ejecutará en varios frames, no podrías poner cosas como la activación de 1 enemigo ya que fácilmente se podrían activar 60 en 1 segundo).

Por eso están las 3 variantes. :)

Vale, muchas gracias, ya entiendo mucho mejor los diferentes triggers

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...