private void OnCollisionEnter(Collision collision) // conbercion villager zombie { if (collision.transform.name == "Zombie") { ZombieStruct zombieStruct = gameObject.AddComponent <MyZombie>().datosZombie; zombieStruct = (ZombieStruct)gameObject.GetComponent <MyVillager>().datosAldeano; switch (gameObject.GetComponent <MyZombie>().datosZombie.colorZombi) { case 0: gameObject.GetComponent <Renderer>().material.color = Color.cyan; break; case 1: gameObject.GetComponent <Renderer>().material.color = Color.green; break; case 2: gameObject.GetComponent <Renderer>().material.color = Color.magenta; break; } gameObject.name = "Zombie"; StopAllCoroutines(); Destroy(gameObject.GetComponent <MyVillager>()); } }
/***********************************************************************************************************************Funcion "Update"***********************************************************************************************************************/ /// <summary> /// Constantemente se va verificando la distancia entre el héroe y cada uno de los zombies /// para así, si la distancia en un número en específico mostrar un mensaje en la UI. /// Por otro lado también se verifica cada que se presiona clic, para así instanciar un objeto que /// sirve como proyectil para destruir zombies. /// </summary> void Update() { foreach (GameObject zo in ClassController.zombieList) { if (zo != null) { distancesH_Z = Vector3.Distance(gameObject.transform.position, zo.transform.position); } if (citizenText == false) { if (distancesH_Z <= 5) { StopCoroutine("RemoveDialogue"); zombieStruct_H = zo.GetComponent <Zombie>().ZombieMessage(); heroStruct_H.dialogue.enabled = true; heroStruct_H.dialogue.text = "ZOMBIE: Waaaarrrr i want to eat " + zombieStruct_H.bodyPart; StartCoroutine("RemoveDialogue"); } } } if (Input.GetButtonDown("Fire1") && heroStruct_H.countProjectiles > 0) { clone = Instantiate(Resources.Load("Projectile", typeof(GameObject)) as GameObject, heroStruct_H.gun.transform.position, transform.localRotation); clone.GetComponent <Rigidbody>().velocity = heroStruct_H.gun.transform.TransformDirection(Vector3.forward * 70); heroStruct_H.countProjectiles--; Destroy(clone, 0.5f); } GameOver(); }
CitizenStruct citizenStruct_H; //Creo una variable de tipo "CitizenStruct" que es la estructura del ciudadano. /******************************************************************************************************************Funcion "OnCollisionEnter"******************************************************************************************************************/ void OnCollisionEnter(Collision collision) //Utilizo la función "OnCollisionEnter" para detectar cuando hay una colisión. { if (collision.gameObject.GetComponent <Zombie>()) //Verifico con el condicional si el objeto que tiene este script esta chocando con algún otro que tenga el componente de "Zombie". { zombieStruct_H = collision.gameObject.GetComponent <Zombie>().ZombieMessage(); //En resumen, "ZombieStruct_H" es igual a la función "ZombieMessage()" ubicada en la clase "Zombie" y, esta función retorna la estructura local de dicha clase, por lo tanto, "ZombieStruct_H" será igual a "ZombieStruct_Z". print("Waaaarrrr i want to eat " + zombieStruct_H.bodyPart); //Ahora imprimo lo que aparece entre comillas más "zombieStruct_H.bodyPart", es decir, "zombieStruct_H" se acabó de sobrescribir por "zombieStruct_Z" y luego accedimos a la variable "bodyPart" de la estructura. } if (collision.gameObject.GetComponent <Citizen>()) //Verifico con el condicional si el objeto que tiene este script esta chocando con algún otro que tenga el componente de "Citizen". { citizenStruct_H = collision.gameObject.GetComponent <Citizen>().CitizenMessage(); //En resumen, "citizenStruct_H" es igual a la función "CitizenMessage()" ubicada en la clase "Citizen" y, esta función retorna la estructura local de dicha clase, por lo tanto, "CitizenStruct_H" será igual a "CitizenStruct_C". print("Hello, i am " + citizenStruct_H.names + " and i am " + citizenStruct_H.age + " years old"); //Ahora imprimo lo que aparece entre comillas más "CitizenStruct_H.bodyPart", es decir, "CitizenStruct_H" se acabó de sobrescribir por "CitizenStruct_Z" y luego accedimos a la variable "randomName" de la estructura, y lo mismo con "citizenStruct.age" } }
private void OnCollisionEnter(Collision collision) // CONTACTO QUE CONVIERTE ALDEANO A ZOMBI { if (collision.transform.name == "Zombie") // SI DETECTA COLISION COMO ZOMBI HACE EL CAST PARA VOLVERLO COMPLETAMENTE ZOMBIE { ZombieStruct zombieStruct = gameObject.AddComponent <MyZombie>().datosZombie; zombieStruct = (ZombieStruct)gameObject.GetComponent <MyVillager>().datosAldeano; gameObject.name = "Zombie"; // LO RENOMBRA COMO ZOMBIE StopAllCoroutines(); // DETIENE LAS CORRUTINAS Destroy(gameObject.GetComponent <MyVillager>()); } }
public void PerseguirVictima(ZombieStruct zs) // inicia la persecusion si encuentra una victima cercana { estadoActual = 3; if (distanciaAldeano <= distanciaEntreObjetos) { direction = Vector3.Normalize(villagerObject.transform.position - transform.position); transform.position += direction * zs.velocidadZombi * (15 / (float)zs.edadZombi) * Time.deltaTime; } else if (distanciaAJugador <= distanciaEntreObjetos) { direction = Vector3.Normalize(heroObject.transform.position - transform.position); transform.position += direction * zs.velocidadZombi * (15 / (float)zs.edadZombi) * Time.deltaTime; } }
private void OnCollisionEnter(Collision collision) { if (collision.transform.name == "Aldeano") { contactoAldeano = true; datosAldeano = collision.gameObject.GetComponent <MyVillager>().datosAldeano; } if (collision.transform.name == "Zombie") { contactoZombi = true; datosZombie = collision.gameObject.GetComponent <MyZombie>().datosZombie; // Esto va en el colision de cada zombie o aldeano } }
private void OnCollisionEnter(Collision collision) { if (collision.transform.name == "Aldeano") { contactoAldeano = true; datosAldeano = collision.gameObject.GetComponent <MyVillager>().datosAldeano; } if (collision.transform.name == "Zombie") { contactoZombi = true; datosZombie = collision.gameObject.GetComponent <MyZombie>().datosZombie; // Esto va en el colision de cada zombie o aldeano Debug.Log("Game Over"); mensajito.SetActive(true); // aqui saca el game over cuando lo tocan Time.timeScale = 0; // timescale detener el juego cuando un zombie toque al heroe } } // funciones devuelven el mensaje por contacto del heroe
public void PerseguirVictima(ZombieStruct zs) // INICIA LA PERSECUSION SI ENCUENTRA UNA VICTIMA CERCANA { //if (villagerObject == null) return; estadoActual = 3; if (distanciaAldeano <= distanciaEntreObjetos) // PERSIGUE PRIMERO A UN ALDEANO { direction = Vector3.Normalize(dAldeano); // BUSCA EL VECTOR DIRECCION QUE APUNTE AL OBJETO AL QUE SE DESEA LLEGAR transform.position += direction * zs.velocidadZombi * (15 / (float)zs.edadZombi) * Time.deltaTime; // TRANSFORMA LA POSICION PARA ACERCARSE A OTRO OBJETO } else if (distanciaAJugador <= distanciaEntreObjetos) // PERSIGUE AL HEROE SINO ENCUENTRA ALDEANOS CERCA { direction = Vector3.Normalize(dPlayer); // BUSCA EL VECTOR DIRECCION QUE APUNTE AL OBJETO AL QUE SE DESEA LLEGAR transform.position += direction * zs.velocidadZombi * (15 / (float)zs.edadZombi) * Time.deltaTime; // TRANSFORMA LA POSICION PARA ACERCARSE A OTRO OBJETO } }
void Update() { foreach (GameObject zo in ClassController.zombieList) { distancesH_Z = Vector3.Distance(gameObject.transform.position, zo.transform.position); if (citizenText == false) { if (distancesH_Z <= 5) { StopCoroutine("RemoveDialogue"); zombieStruct_H = zo.GetComponent <Zombie>().ZombieMessage(); heroStruct_H.dialogue.enabled = true; heroStruct_H.dialogue.text = "ZOMBIE: Waaaarrrr i want to eat " + zombieStruct_H.bodyPart; //Ahora el texto de la variable "dialogue" de la estructura cambiará a lo que aparece entre comillas más "zombieStruct_H.bodyPart", es decir, "zombieStruct_H" se acabó de sobrescribir por "zombieStruct_Z" y luego accedimos a la variable "bodyPart" de la estructura. StartCoroutine("RemoveDialogue"); } } } }
IEnumerator ComportamientoZombie(ZombieStruct gameStruct) { while (true) { gameStruct.estadoZombi = (ZombieStruct.estadosZombi)Random.Range(0, 3); switch (gameStruct.estadoZombi) { case ZombieStruct.estadosZombi.Idle: // Para que se quede quieto seMueve = 0; break; case ZombieStruct.estadosZombi.Moving: // Para que se mueva hacia el frente seMueve = 1; break; case ZombieStruct.estadosZombi.Rotating: // Para que rote seMueve = 2; selectorDireccional = Random.Range(0, 2); break; } yield return(new WaitForSeconds(3.0f)); // Espera 3 segundos y cambia de comportamiento } }
} // funciones devuelven el mensaje por contacto del heroe public string MensajeZombi(ZombieStruct datosZombie) { string mensajeZombi = "Waaaarrrr quiero comer " + datosZombie.gustoZombi; return(mensajeZombi); }