Menu
CoddyTech

Construir plataformas

Lección 5 de 18 del curso Juego de Unity: defensa de torres de Coddy.

El jugador construye torres haciendo clic en las plataformas de construcción, los cuadrados grises junto al camino. El clic ocurre en la pantalla, en píxeles, y las plataformas están en el mundo 3D, así que el clic se convierte en un rayo. Camera.main.ScreenPointToRay(point) devuelve el rayo que comienza en la cámara y atraviesa ese punto de la pantalla hacia la escena, y Physics.Raycast lo sigue e informa del primer collider que alcanza: el que el jugador ve bajo el ratón. Una herramienta de pintura que colorea el bloque en el que haces clic:

void Update()
{
    if (!Mouse.current.leftButton.wasPressedThisFrame)
    {
        return;
    }

    Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
    if (Physics.Raycast(ray, out RaycastHit hit) && hit.collider.TryGetComponent(out Paintable block))
    {
        block.Paint(brushColor);
    }
}

La segunda mitad de && se ejecuta solo cuando el rayo alcanza algo, así que hit se rellena. TryGetComponent pregunta entonces si aquello que se ha alcanzado es algo que te interesa: el rayo también alcanza el suelo, el camino y los árboles, que no tienen Paintable, así que esos clics no hacen nada.

Todas las escenas de aquí usan únicamente el Input System de Unity 6, así que Mouse.current lee el ratón. Su posición está en píxeles de pantalla, que es lo que espera ScreenPointToRay.

challenge icon

Desafío

Intermedio

Las plataformas tienen un script BuildPad, y el objeto Game tiene un BuildManager cuyo towerPrefab es el prefab ArrowTower.

  1. En BuildPad.cs, añade un campo público tower de tipo Tower: la torre construida en esta plataforma, o null.
  2. En BuildManager, añade un campo privado serializado towerPrefab (un Tower). En Update, cuando se pulse el botón izquierdo del ratón en este fotograma, lanza un rayo desde la cámara a través del ratón.
  3. Cuando el rayo alcance un collider que tenga un BuildPad, y esa plataforma todavía no tenga torre, instancia towerPrefab en la posición de la plataforma y guarda la nueva torre en el tower de la plataforma. Una plataforma que tenga una torre, o cualquier elemento que no sea una plataforma, no hace nada.

Pulsa Play y haz clic en algunas plataformas; después, pulsa Check.

Pruébalo tú mismo

using UnityEngine;

// Más adelante: hacer clic en las plataformas de construcción para colocar torres, la tienda y el panel de torres.
public class BuildManager : MonoBehaviour
{
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego de Unity: defensa de torres