Unity Spain
Mesa de ayuda => Unity3D => Scripting => Mensaje iniciado por: arth912 en Mayo 23, 2019, 02:19:44 AM
Hola foro, tengo un slider de vida entonces quiero que cuando el jugador colisione con un objeto el slider baje de 1 en 1 constantemente, solo puedo hacer que baje cada vez que colisiono hay alguna solucion a mi problema? Gracias.
si lo metes en OnColliderStay o OnTriggerStay seguirá bajando.
Me puedes explicar mas detalladamente? lamento la ignorancia
La acción sería que baje de 1 en 1, pero de 1 en 1 no nos dice absolutamente nada, que es de 1 en 1, 60 veces por segundo? 200 veces por segundo? cada 1 segundo ? ... como te dice leocub con un "stay" podrías verificar una y otra vez, pero eso sí, va a bajar horriblemente rápido si no hacés algo al respecto, por ejemplo con un simple flag podés hacer algo así, con una corrutina:
public float duracion = 1f;
Coroutine perderVidaCoroutine;
void OnCollisionStay( Collision col )
{
if( personajeDisponible )
perderVidaCoroutine = StartCoroutine( PerderVida() );
}
IEnumerator PerderVida()
{
vida--;
personajeDisponible = false; //con esto no re-disparás la corrutina una y otra vez
yield return new WaitForSeconds( duracion ); //termina en 1 segundo por defecto
personajeDisponible = true;
}
Creo que podés ver si X corrutina se está reproduciendo, eso en este caso sería ideal, nunca lo usé.