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.
Desafío
IntermedioLas plataformas tienen un script BuildPad, y el objeto Game tiene un BuildManager cuyo towerPrefab es el prefab ArrowTower.
- En
BuildPad.cs, añade un campo públicotowerde tipo Tower: la torre construida en esta plataforma, o null. - En
BuildManager, añade un campo privado serializadotowerPrefab(un Tower). EnUpdate, 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. - Cuando el rayo alcance un collider que tenga un BuildPad, y esa plataforma todavía no tenga torre, instancia
towerPrefaben la posición de la plataforma y guarda la nueva torre en eltowerde 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
{
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.