// Visualizacion sobre el recorrido que toma los zombie y los aldeanos IEnumerator Sateliteorbital() { zombie = GameObject.FindGameObjectsWithTag("Zombie"); aldeanos = GameObject.FindGameObjectsWithTag("Villager"); // Informacion necesario sobre el aldeano foreach (GameObject item in aldeanos) { yield return(new WaitForEndOfFrame()); villa.Ciudadanos componenteAldeano = item.GetComponent <villa.Ciudadanos>(); if (componenteAldeano != null) { distanciaInical = Mathf.Sqrt(Mathf.Pow((item.transform.position.x - transform.position.x), 2) + Mathf.Pow((item.transform.position.y - transform.position.y), 2) + Mathf.Pow((item.transform.position.z - transform.position.z), 2)); if (distanciaInical < 5f) { tiempo = 0; informacionAldeano = item.GetComponent <villa.Ciudadanos>().informacionAldeano; TextodelVillager.text = "Hola soy un " + informacionAldeano.nombre + " y he cumpido " + informacionAldeano.edad.ToString() + " años"; } if (tiempo > 3) { TextodelVillager.text = " "; } } } //Datos necesarios sobre el Zombie. foreach (GameObject itemZ in zombie) { yield return(new WaitForEndOfFrame()); zom.Zombie componenteZombie = itemZ.GetComponent <zom.Zombie>(); if (componenteZombie != null) { distanciaFinal = Mathf.Sqrt(Mathf.Pow((itemZ.transform.position.x - transform.position.x), 2) + Mathf.Pow((itemZ.transform.position.y - transform.position.y), 2) + Mathf.Pow((itemZ.transform.position.z - transform.position.z), 2)); if (distanciaFinal < 5f) { tiempo = 0; informacionZombie = itemZ.GetComponent <zom.Zombie>().informacionZombie; TextodelZombie.text = "Grrrrrrrrrrrr Comida, comidaaaaa Grrr " + informacionZombie.gusto; } if (tiempo > 3) { TextodelZombie.text = " "; } } } yield return(new WaitForSeconds(0.1f)); StartCoroutine(Sateliteorbital()); }
IEnumerator buscadorpremium() { heroe = GameObject.FindGameObjectWithTag("Hero"); Aldea = GameObject.FindGameObjectsWithTag("Citizen"); foreach (GameObject person in Aldea) { yield return(new WaitForEndOfFrame()); civbody.Ciudadanos referenciaciv = person.GetComponent <civbody.Ciudadanos>(); if (referenciaciv != null) { PuntoB = Mathf.Sqrt(Mathf.Pow((heroe.transform.position.x - transform.position.x), 2) + Mathf.Pow((heroe.transform.position.y - transform.position.y), 2) + Mathf.Pow((heroe.transform.position.z - transform.position.z), 2)); PuntoA = Mathf.Sqrt(Mathf.Pow((person.transform.position.x - transform.position.x), 2) + Mathf.Pow((person.transform.position.y - transform.position.y), 2) + Mathf.Pow((person.transform.position.z - transform.position.z), 2)); if (!persigue) { if (PuntoA < 5f) { Zombiestate = State.Pursuing; Target = person; persigue = true; } else if (PuntoB < 5f) { Zombiestate = State.Pursuing; Target = heroe; persigue = true; } } if (PuntoA < 5f && PuntoB < 5f) { Target = person; } } } if (persigue) { if (PuntoA > 5f && PuntoB > 5f) { persigue = false; } } yield return(new WaitForSeconds(0.1f)); StartCoroutine(buscadorpremium()); }
// Creacion de una corrutina que pone al zombie a buscar un objetivo y si esta dentro de 5 unidades del zombie lo persigue priorizando a los aldeanos IEnumerator buscaAldeanos() { heroe = GameObject.FindGameObjectWithTag("Hero"); aldeanos = GameObject.FindGameObjectsWithTag("Villager"); foreach (GameObject item in aldeanos) { yield return(new WaitForEndOfFrame()); villa.Ciudadanos componenteAldeano = item.GetComponent <villa.Ciudadanos>(); if (componenteAldeano != null) { distanciafinal = Mathf.Sqrt(Mathf.Pow((heroe.transform.position.x - transform.position.x), 2) + Mathf.Pow((heroe.transform.position.y - transform.position.y), 2) + Mathf.Pow((heroe.transform.position.z - transform.position.z), 2)); distanciaincial = Mathf.Sqrt(Mathf.Pow((item.transform.position.x - transform.position.x), 2) + Mathf.Pow((item.transform.position.y - transform.position.y), 2) + Mathf.Pow((item.transform.position.z - transform.position.z), 2)); if (!followState) { if (distanciaincial < 5f) { estadodelzombie = Estado.Pursuing; objetivo = item; followState = true; } else if (distanciafinal < 5f) { estadodelzombie = Estado.Pursuing; objetivo = heroe; followState = true; } } if (distanciaincial < 5f && distanciafinal < 5f) { objetivo = item; } } } if (followState) { if (distanciaincial > 5f && distanciafinal > 5f) { followState = false; } } yield return(new WaitForSeconds(0.1f)); StartCoroutine(buscaAldeanos()); }