Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Ayuda con Disparo Aleatorio

Iniciado por Joksan, Abril 29, 2018, 04:48:14 AM

Tema anterior - Siguiente tema
Hola tengo un script de disparo y le agregue un Random.Range para que al disparar el arma no se disparara a la primera si no aleatorio y el problema es que el random range me genera el numero aleatorio y el arma no se dispara hasta que se vuelva a iniciar el juego y salga el numero indicado y necesito ayuda para que al iniciar el juego no se tenga que volver a cerrar hasta que salga el numero y tambien que si no dispara que salga la animacion de recarga
 

void Start ()
    {
         
        _animArma = GetComponent<Animation>();
        CapacidadCargador = Random.Range(0, max: 6);
        //HitAcertado.SetActive(false);
        // EfectoDisparo.SetActive(false);
    }
   
    void Update()
    {
        if (Input.GetButton("Fire1") && CapacidadCargador == 4   && !_animArma.IsPlaying("Recargar") )
        {
            TiempoDisparo += Time.deltaTime;
            if (TiempoDisparo >= _velocidad && Balas >= 1)
            {
                _animArma["Disparar"].speed = velocityAnimation;
                _animArma.Play("Disparar", PlayMode.StopAll);
                Camera.main.GetComponent<AudioSource>().PlayOneShot(sonidoDisparo, 0.3f);
                //EfectoDisparo.SetActive(true);
                Balas -= 1;
                Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);
                if (Physics.Raycast(ray, out hit, Distancia))
                {
                    if (hit.collider.gameObject.tag == "Pared")
                    {
                        //hueco = Instantiate(HuecoPared, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal)) as GameObject;
                        Debug.Log("Acertaste");
                        HitAcertado.SetActive(true);
                    }
                }
                TiempoDisparo = 0;
                //Destroy(hueco, 3.5f);
            }
        }
        if (Balas == 0 && Cargador > 1 && !_animArma.IsPlaying("Disparar") )
        {
            _animArma["Recargar"].speed = 1f;
            _animArma.Play("Recargar", PlayMode.StopAll);
            Camera.main.GetComponent<AudioSource>().PlayOneShot(sonidoRecarga, 0.3f);
            Recargar();
        }
    }
    void Recargar()
    {
        Balas += ComprobarRecarga;
        Cargador -= ComprobarRecarga;
       
    }
}

 
 

Hola,
 
El problema que veo es que a la variable CapacidadCargador se le asigna valor una única vez, Unity tiene una función que te permite ejecutar un método cada X segundos
 
https://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.html
 
 
 

  void Start()
    {
//a los dos segundos de empezar la partida se ejecuta el RandomDisparar, luego se repite la operación cada medio segundos
        InvokeRepeating("RandomDisparar", 2.0f, 0.5f);
   
    }
    void RandomDisparar()
    {
      capacidadCargador = Random.Range(0, max: 6);
    }

 
 

ya inclui el codigo pero como tu dices el random range se genera cada 2 segundos pero es lo que no quiero quiero que el random range se invoque cada que se ejecuta el boton fire1 no se si me explico este codigo es para mi arma (revolver) se coloque solo una bala y sea aleatoria a la hora de disparar

Cita de: Joksan date=1525028572quiero que el random range se invoque cada que se ejecuta el boton fire1
   


y por qué no lo llamas cada vez que apretás el dichoso botón y listo?

Abril 29, 2018, 09:23:46 PM #4 Ultima modificación: Abril 29, 2018, 09:38:40 PM por Joksan
Es lo que no se como esque eso de cambiar de lenguaje me a traído muchos problemas y e buscado en internet y no encuentro respuestas lo que tengo mas o menos claro es que lo necesito implementar en el 
 

if (Input.GetButton("Fire1") && CapacidadCargador == 4   && !_animArma.IsPlaying("Recargar") )

 
 
 
pero si el numero no es = 4 , que se recarge el arma
 
 
 
 
 
 
 

if (Balas == 0 && Cargador > 1 && !_animArma.IsPlaying("Disparar") )
        {
            _animArma["Recargar"].speed = 1f;
            _animArma.Play("Recargar", PlayMode.StopAll);
            Camera.main.GetComponent<AudioSource>().PlayOneShot(sonidoRecarga, 0.3f);
            Recargar();
        }
    }
    void Recargar()
    {
        Balas += ComprobarRecarga;
        Cargador -= ComprobarRecarga;
       
    }
}

Cita de: Joksan date=1525029826Es lo que no se como esque eso de cambiar de lenguaje me a traído muchos problemas y e buscado en internet y no encuentro respuestas lo que tengo mas o menos claro es que lo necesito implementar en el 
   
   

if (Input.GetButton("Fire1") && CapacidadCargador == 4   && !_animArma.IsPlaying("Recargar") )

   
       
   
   
      pero si el numero no es = 4 , que se recarge el arma
   


Osea no encontras como llamar a una función en C#? en Unity!? estamos hablando de misma internet no? ... además, en el manual tenés todo, no necesitas irte a lados extraños, tenes descripción de todo lo que querés hacer, ejemplos, pasá de JS a c# y fijate las diferencias si todavía no estás habituado, pero no es excusa de nada.
 
Cambiar de lenguaje no te puede traer tantos problemas porque UntiyScript y c# son casi idénticos, es lógico que para uno estés más oxidado pero el problema ya es conceptual no problema de lenguaje.
 
 

Eso lo entendo el dato es que no soy experto soy un estudiante ;(

Hola,
 
No tengo muy claro cual es la funcionalidad que que quieres implementar, pero si quieres ejecutar el Random cada vez que pulsas disparar seria algo como esto:
 
 
 

if (Input.GetButton("Fire1")
{
  int capacidadCargador =  RandomDisparar();
}
 
int RandomDisparar()
{
      return Random.Range(0, max: 6);
}

 
 

Abril 29, 2018, 10:08:40 PM #8 Ultima modificación: Abril 29, 2018, 10:13:55 PM por lightbug
Cita de: Joksan date=1525031115Eso lo entendo el dato es que no soy experto soy un estudiante ;(
   


Experto en buscar por internet? o en Unity? porque el tema este quedate tranquilo que está lejos de ser tema de expertos.
 
No pasa por eso, alguien te va a dar la línea de código (casi) que te va a resolver tu problema, pasado mañana te pasa otra cosa y otro post más (basandome en que creaste este porque nadie te contestó el anterior), así no sirve, lo mejor es que en base al punto de partida (el manual/ las referencias scripting) encuentres lo que buscás, osea llamar a un método propio en donde dentro tengas el Random, lo hacés cuando querés, bajo la condición que querés.  Y si te parece chino básico eso aprendé a leer el manual y qué significa cada cosa, que no es necesariamente de estudiante, le sirve a todo el mundo saber esto y más de una vez hay que volver.

Abril 29, 2018, 10:14:18 PM #9 Ultima modificación: Abril 29, 2018, 10:33:43 PM por Joksan
tengo un arma un revolver, a este le he asignado un total de una sola bala, con una capacidad de 6 tiros y quiero que el disparo sea aleatorio 

Etiquetas: