A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Manejando la cadencia de disparo

14/40
Recursos

Aportes 7

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Uff me ha gustado mucho la soluci贸n que le ha dado con la corotuine, sobre todo porque se aprovecha el click del mouse para la misma.

Por otra parte yo habia dado otra soluci贸n que es al parecer, menos eficiente, puesto que se ejecuta siempre y no solo tras disparar.

void Update(){
     _currentLoadTime += Time.deltaTime;

        if (!Input.GetMouseButton(0) || _currentLoadTime < loadTime) return;

        var angle = Mathf.Atan2(_aimDirection.y, _aimDirection.x) * Mathf.Rad2Deg;

        var rotation = Quaternion.AngleAxis(angle, Vector3.forward);

        Instantiate(bulletPrefab, transform.position, rotation);

        _currentLoadTime = 0;
}

Lo que hago es creaer un par de variables, que serviran como contador y como objetivo para permitir al jugador disparar o no, al disparar el contador se reinicia a 0, se suma el tiempo de cada frame y mientras no sea mayor o igual al objetivo, el jugador no puede disparar.

Existe otra forma de configurar el comportamiento de la recarga usando Async/Await en C# en lugar de Coroutines.

Este mecanismo se usa bastante en programaci贸n en C# fuera de Unity (p ej: Backends, Console/ Desktop apps, etc.) y, por lo que he le铆do, est谩 tomando bastante fuerza en el desarrollo de videojuegos en Unity porque permite retornar valores y esperar m煤ltiples condiciones antes de terminar su ejecuci贸n, cosas que con las Coroutines no es posible o no tan sencillo.

 private async void ReloadGun()
 {
        await Task.Delay(TimeSpan.FromSeconds(1 / fireRate));
        gunLoaded = true;

        // Just for debug
        print("Gun loaded!");
 }

0:24 CUM xd

Puede que mas adelante lo haga pero es buena idea destruir las instancias del prefab de la bala para liberar memoria

Transform instanciatedBullet = Instantiate(bulletPrefab, transform.position, targetRotation);

Destroy(instanciatedBullet.gameObject, 5f);

Esperar un segundo es mucho tiempo, asi que decidi que el arma se recargue en cuanto el jugador suelte el click.
con un if

if(Input.GetMouseButton(0) == false){
	gunLoaded = true;

inserta ese bloque de codigo justo depues de cerrar la llave del if para disparar la bala.

una opci贸n alternativa es usar el m茅todo
Input.GetMouseButtonDown(0)
y nos ahorramos un par de l铆neas

Genial