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);
}
}
}
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.
Cita de: iRobb date=1574804402Pero 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
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. :)
Cita de: Antonio date=1574813533Hola 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