Español Valencià
🌹

Instrucciones

FASE 1 - CREAR GENERADOR, DESTINO Y SCRIPTS⏰ 10' aprox

👉
Esta página contiene las instrucciones específicas de la Primera Fase de la tercera sesión para desarrollar el juego de El Puente de las Flores.

Vamos a crear en primer lugar un objeto vacío, que será el generador de nuestros coches.

Vamos a colocarlo en el centro de un carril (X: -7.5), pero fuera del mapa para que los coches aparezcan fuera de la escena y entren.

image

También, en el mismo carril, pero en el otro extremo, vamos a crear otro objeto vacío, el destino de nuestros coches.

Para hacer que aparezcan coches que se muevan por nuestra calle será necesario utilizar dos scripts, uno para que se creen los coches, y otro para que se muevan.

Creamos una nueva carpeta “Scripts” en nuestro proyecto, y dentro de ella, creamos un script haciendo click derecho > Create > C# Script. Lo llamamos “GeneraCoches”. Este script generará coches esperando un intervalo de tiempo, y les asigna el destino. El código es el siguiente.

using UnityEngine;

public class GeneraCoches : MonoBehaviour
{
    public GameObject[] cochePrefabs; // Lista de Prefabs de coches
    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 SpawnCoche esperando ese intervalo
    void Start()
    {
        SpawnCoche();
    }

    //Reseteamos el intervalo de generación y generamos un coche en el punto de generación
    //Asignamos el destino al coche generado
    void SpawnCoche()
    {
        int randomIndex = Random.Range(0, cochePrefabs.Length);
        GameObject coche = Instantiate(cochePrefabs[randomIndex], transform.position, transform.rotation);
        coche.GetComponent<MoverCoche>().SetDestination(destinationPoint.position); 
        
        float nextSpawnTime = Random.Range(minSpawnInterval, maxSpawnInterval);
        Invoke("SpawnCoche", nextSpawnTime);
    }
}

En la carpeta de “Scripts” creamos otro script, al que llamaremos “MoverCoche”. Este es el código.

using UnityEngine;

public class MoverCoche : MonoBehaviour
{

    private float speed; // Velocidad del coche
    private Vector3 destination; //Destino del coche
    public float minSpeed = 5f;
    public float maxSpeed = 15f;
    
    // Asignamos una velocidad aleatoria al coche 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 GeneraCoches para asignar el destino al coche
    public void SetDestination(Vector3 dest)
        {
            destination = dest;
        }
        
    //Movemos el coche 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);
        }
    }
}

En este script, se asigna una velocidad aleatoria a cada coche, y se orienta hacia su destino al iniciar.

Movemos el coche hacia su destino, y por último, lo destruimos cuando llega.

También hemos creado la función “SetDestination”, que utilizamos en el script “GeneraCoches” para asignarle el destino al crearlo.