FASE 3 - PEATONES⏰ 15' aprox
Una vez finalizado el funcionamiento de los coches, vamos a replicarlo para los peatones.
Vamos a utilizar en total 8 generadores, en cada acera, dos a cada lado, cambiando el sentido de los peatones en cada generador.
Comenzamos creando un generador en nuestra escena. Es importante que no choque contra decoraciones como papeleras o bancos. Hay que revisar por ello su posición en el eje X.
Para ello podemos ponerlo dentro de la acera, comprobar que está centrado entre el final de la acera o las flores y los obstáculos, y después ponerlo fuera de la acera (eje Z).
El siguiente paso será crear otros dos scripts, GeneraPeaton y MoverPeaton. El código es igual que el de los coches, pero estos dos los vamos a actualizar más adelante para que los peatones roben tiestos. También vamos a cambiar los nombres de las variables correspondientes, y la velocidad a la que se mueven los peatones en el script MoverPeaton.
using UnityEngine;
public class GeneraPeaton : MonoBehaviour
{
public GameObject[] peatonPrefabs; // Lista de Prefabs de peatones
public Transform destinationPoint; // Punto de destino
private float spawnInterval; // Intervalo entre generación
public float minSpawnInterval = 7f;
public float maxSpawnInterval = 10f;
//Definimos un intervalo de generación aleatorio y llamamos a la función SpawnPeaton esperando ese intervalo
void Start()
{
spawnInterval = Random.Range(minSpawnInterval, maxSpawnInterval);
SpawnPeaton();
}
//Reseteamos el intervalo de generación y generamos un peatón en el punto de generación
//Asignamos el destino al peatón generado
void SpawnPeaton()
{
spawnInterval = Random.Range(minSpawnInterval, maxSpawnInterval);
int randomIndex = Random.Range(0, peatonPrefabs.Length);
GameObject peaton = Instantiate(peatonPrefabs[randomIndex], transform.position, transform.rotation);
peaton.GetComponent<MoverPeaton>().SetDestination(destinationPoint.position);
Invoke("SpawnPeaton", spawnInterval);
}
}
using UnityEngine;
public class MoverPeaton : MonoBehaviour
{
private float speed; // Velocidad del personaje
private Vector3 destination; //Destino del personaje
public float minSpeed = 2.5f;
public float maxSpeed = 3f;
// Asignamos una velocidad aleatoria al peatón y lo orientamos hacia su destino
void Start()
{
speed = Random.Range(minSpeed, maxSpeed);
if (destination != Vector3.zero)
{
transform.rotation = Quaternion.LookRotation(destination - transform.position);
}
}
//Método que utilizamos en GeneraPeaton para asignar el destino al personaje
public void SetDestination(Vector3 dest)
{
destination = dest;
}
//Movemos el personaje hacia su destino y lo destruimos cuando llega
void Update()
{
if (Vector3.Distance(transform.position, destination) > 0.1f)
{
transform.position = Vector3.MoveTowards(transform.position, destination, speed * Time.deltaTime);
}
else
{
Destroy(gameObject);
}
}
}
Asignamos el script GeneraPeaton a nuestro generador de la escena.
En el inspector, añadimos el destino de nuestra escena y los prefabs de los personajes, pero sin incluir los dos policías, ya que uno será el personaje que vamos a controlar nosotros. Por último, asignamos el script MoverPeaton a cada prefab, y podemos ajustar la velocidad en el inspector si no lo hemos hecho antes.
Pulsamos Play para comprobar que aparecen peatones y se mueven por la acera, y si es así, duplicamos los generadores y destinos de la misma forma que hicimos con los generadores de coches.
Deberíamos tener 8 generadores de peatones, alternando el sentido en el que se mueven como hicimos con los coches.
Como último paso, agrupamos todos los generadores en nuestra escena, en un solo elemento “Generadores”.
