Hola tengo una duda sobre el script de los botones en c# y es que entiendo bien que se agrega una funcion al boton al darse click por ejemplo
public Button Shootbtn;
Button btn = Shootbtn.GetComponent<Button>();
btn.onClick.AddListener(Update);
Pero lo que quiero hacer es decirle al boton que si se da click y una variable sea falsa en el boton haga tal cosa como:
if (Shootbtn.onClick && !Arma)
{
//codigo de acciones
}
lo que pasa es que no puedo agregar el .onClick en mi funcion Update y queria saber si tengo que hacer diferentes funciones para cuando se clickea el boton o como decirle al boton que si se clickea y una variable es falsa se haga una accion
Hola! Efectivamente le pasas una función al botón, esta función la puedes crear tú y dentro de la función puede haber lo que quieras, ejemplo:
public Button btn;
void Start ()
{
btn.OnClick.AddListener(MiFuncion);
}
void MiFuncion()
{
if(!arma)
{
...
}
}
Como la función es llamada solo cuando el botón es pulsado y en ese momento puedes mirar si la variable arma es true o false.
Muchas gracias esque en mi juego el script que tengo esta agregado el imput.GetButton("Fire1") y lo que quise hacer es en vez de que sea con el fire1 sea con un botón y todo el código esta en el update.
Pues en ese caso lo que haría yo es crear una variable bool y al pulsar le asignas true, la cuestión es que tienes que controlar cuando se vuelva false. Ejemplo:
bool botonPulsado = false;
public Button btn;
void Start ()
{
btn.OnClick.AddListener(MiFuncion);
}
void MiFuncion()
{
botonPulsado = !botonPulsado; //Opción A
botonPulsado = true; //Opción B
}
void Update ()
{
if((Input || botonPulsado) && !arma)
{
...
botonPulsado = false; //Opción B
}
}
De esta manera cada vez que pulses el botón la variable botonPulsado cambiará al otro estado, pero tal vez no es lo que necesites.
Otra opción es cambiar la variable una vez ha entrado en la condición.
De hecho creo que si es lo que necesito jaja porque ahurita todo bien con agregarle la funcion update al boton pero ahora el problema es que mi arma se dispara sola aunque no haya clickeado el boton por eso le quiero agregar como un if para que diga que si se pulsa el boton dispare y si en cambio no tiene balas que recargue
else if (MiturnoPlayer.Equals(TManager.tmanager.Turno) && TiempoDisparo >= _velocidad && RandomDisp == 0 && !_animArma.IsPlaying("Poner bala") && !_animArma.IsPlaying("Recargar") && Balas >= 1)
{
//Codigo de lo que se tiene que hacer si se presiona el boton pero si tiene balas el arma
_animArma.Play("Disparar", PlayMode.StopAll);
Camera.main.GetComponent<AudioSource>().PlayOneShot(sonidoDisparo, 0.3f);
Balas -= 1;
TiempoDisparo = 0;
TManager.tmanager.Turno += 1;
Invoke("TiempoCanvas" ,2f);
Shootbtn.gameObject.SetActive(true);
}
else if (MiturnoPlayer.Equals(TManager.tmanager.Turno) && TiempoDisparo >= _velocidad && RandomDisp == 0 && !_animArma.IsPlaying("Poner bala") && !_animArma.IsPlaying("Recargar") && Balas >= 1)
{
//Codigo de lo que se tiene que hacer si se clickea el boton y no tiene balas el arma
_animArma.Play("Disparar", PlayMode.StopAll);
Camera.main.GetComponent<AudioSource>().PlayOneShot(sonidoDisparo, 0.3f);
Balas -= 1;
TiempoDisparo = 0;
TManager.tmanager.Turno += 1;
Invoke