Jump to content

Recommended Posts

No deberías ir haciendo las preguntas de manera independiente y no seguir colocándolas en el mismo hilo? Aparte, como marcarás el best answer?

Share this post


Link to post
Share on other sites
On 5/11/2020 at 4:59 PM, nomoregames said:

Buenas tardes, haber si me podéis ayudar con este encuentra a Wally.

 

Tengo el siguiente script 


  RaycastHit hitInfo;
        if (Physics.Raycast(NPC.transform.position, NPC.transform.forward,out hitInfo, 1))
            {
                if (hitInfo.transform.tag == "Player")
                {
                    if (IsInAtack == false)	// aqui esta el error.... esto lo uso para que, mientras este atacando, no se pueda ejecutar lo de dentro de el if, que lo que hace es instanciar el arma y ponerla en su sitio... el error es que en ocasiones se ejecuta mas de una bez
                    {
                        sword = Instantiate<GameObject>(Espada);
                        sword.transform.position = NPC.transform.position;
                        sword.transform.SetParent(NPC.transform);
                        sword.transform.localPosition += new Vector3(0, 3, 0.45f);
                        sword.transform.eulerAngles = NPC.transform.eulerAngles;
                        IsInAtack = true;
                      
                        
                        StartCoroutine(Atack());
                    }
                }
            }
        
        
        
        
        }
    IEnumerator Atack()
    {
        float c = 0;         // el contador de la cantidad de tiempo que se ejecutara la corrutina
        
        bool a = true; // lo utilizo para que cuando el contador llegue a cierto numero, pase a ser false
        bool b = false; // solo puede ser true una bez... no se si me explico

        bool localAtack = true;  // NUEVO
      
      
        yield return new WaitForSecondsRealtime(0.4f);
        while (localAtack == true)   //NUEVO
        {
            
          if (b == true)
            {
                b = false;
            }
            
          
            c += 1 * Time.deltaTime;

            if (c >= 0.01f && a == true)
            {
                Destroy(GameObject.Find("Daga(Clone)")); // esto es un arreglillo, en un principio havia echo que destrullera el GameObject Sword, asignado mas arriba... pero ay casos en los que por algun motivo... se instancian mas de una espada, por eso este arreglillo
                
                a = false;
                b = true;
                print(1);
            }

            if (b == true)
            {
                MoveController.transform.position += -MoveController.transform.forward; // esto se ejecuta solo una bez, hace retroceder a el NPC hacia atras, para que sea mas dificil darle... esta esquibando despues de destruir la "Daga"
              
            }
            
            if (c >= 0.5f) // el contador sigue a pesar de que la daga ya fue destruida para darle un tiempo antes de realizar otro ataque... sino estaria atacando todo el rato
            {
                c = 0;
                StopCoroutine(Atack());
                localAtack = false;   // NUEVO
            }


            
            
            yield return new WaitForSecondsRealtime(0.1f);
        }
      IsInAtack = false;  // NUEVO

No se si me he explicado bien... el caso es que no encuentro el porque se ejecuta en ocasiones (concreta-mente después de haberse ejecutado dos veces ).... alguien sabría encontrar el puñetero error?

Prueba a  poner el código que está comentado como NUEVO a ver si te funciona....

  • Like 1

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...