Aumentar value de un Slider

Kolonic

Jelou der

EDIT: Unity

Me estoy peleando con un slider que no aumenta su valor. Estoy con un shooter vertical (space invader) en el que tengo un slider que actúa de power bar, en el que una vez llega al máximo puede usar una habilidad especial.

El caso es que no me funciona esta tontería y no entiendo muy bien el porque.

Tengo el objeto powerbar.

public class PowerBar : MonoBehaviour
{

public Slider slider;

public void SetMinPower(int power)
{
    slider.minValue = power;
    slider.value = power;
}
   
public void SetPower(int power)
{
    slider.value = power;
}

private void Start()
{
    slider.value = 0;
}
}

Y en el enemigo tengo este método para cuando muere.

private void AddPower()
    {
        powerBar.SetPower((int)powerBar.slider.value + 1);
    }

Actualmente está así, pero lo he probado de diferentes maneras, metiendo el valor en una variable y incrementarlo y usar esa variable. Parece que se incrementa pero solo una vez.

Aunque ese objeto enemigo desaparezca, el componente del slider tendría que mantener el valor, no?

Alguna idea? He pensado que no le guste el int y necesite ser float, pero lo he probado siendo float y tampoco tira

Nedaim

Como tiro al aire, teniendo en cuenta que se incrementa una vez, ¿Es posible que todos los slider de los enemigos tengan valor 0 y que cuando se incrementa no se refleje en los slider de los otros enemigos con lo que pasa de 0 a 1 constantemente?

1 1 respuesta
B

No se porque complicas las cosas con esto

private void AddPower()
    {
        powerBar.SetPower((int)powerBar.slider.value + 1);
    }

Cambialo a:

private void AddPower()
    {
        powerBar.SetPower(this.power);
    }


y esto

public void SetPower(int power)
{
    slider.value = power;
}

a esto

public void SetPower(int power)
{
    slider.value += power;
}

De esta manera, cada enemigo tendrá una variable 'power' que le pondrás y este 'value' será el aumento que tenga la barra. Si es un enemigo de power 1 la barra subirá 1, si es uno de 3, subirá 3. No necesitas saber que valor tiene ya la barra a menos que sea acumulativo y que tras usar la barra guarde el extra.

Si no te funciona, será porque no está ligada la PowerBar a la barra de UI que te muestra los valores. Para evitar esto, te recomiendo usar Delegates y así no tienes que preocuparte porque estén ligados. Y son más curiosos de realizar.

Enemigo muere: Ejecuta la llamada delegate de +Power a la barra
PowerBar está escuchando las llamadas delegate de +Power.
PowerBar llega a maxValue, lanza llamada de fullPower
Player y UI está escuchando la llamada de fullPower y hasta que no la escucha no hace ese efecto.
Player y UI detectan que está fullPower lanzada. Permiten al jugador usar la habilidad y mostrar icono o funcionalidad para avisar al jugador

1 1 respuesta
Kolonic

#2 #3 Tienes razón totalmente, vaya trokolo me metí complicando el método la verdad. La barra ingame no incrementa, pero al pararlo entonces la barra si pilla el value correcto.

Voy a mirarme lo de los delegates, que he visto que se valora bastante bien el uso de estos en proyectos y que facilita las cosas un huevo, gracias!

__TRUNKS__

No sé si será el caso, pero si tienes los valores del slider entre 0 (mínimo) y 1 (máximo) al utilizar int vas a tener siempre o la barra llena o vacía. Si has probado con float asegúrate de que no has convertido a float el valor final (pues estarías convirtiendo ya el resultado entero), sino que utilizas un float en la operación.

1
B

Cómo va esto al final? :D

1 1 respuesta
Kolonic

#6 Pues aun no he seguido con el tema porqué he estado liadiyo con el curro, pero el incremento se soluciono, ahora falta ver el porque no se incrementa la barra en runtime.
Aún así quiero implementarlo con los Delegates, que tengo pendiente de mirarmelos

Usuarios habituales