Menu
CoddyTech

Emplacements de construction

Leçon 5 sur 18 du cours Jeu Unity : défense de tours de Coddy.

Le joueur construit des tours en cliquant sur les emplacements de construction, les carrés gris à côté du chemin. Un clic se produit à l’écran, en pixels, tandis que les emplacements se trouvent dans le monde 3D : le clic devient donc un rayon. Camera.main.ScreenPointToRay(point) renvoie le rayon qui part de la caméra et traverse ce point de l’écran pour entrer dans la scène, et Physics.Raycast le suit et signale le premier collider qu’il rencontre : celui que le joueur voit sous la souris. Un outil de peinture qui colore le bloc sur lequel vous cliquez :

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 deuxième partie de && ne s’exécute que lorsque le rayon a touché quelque chose, donc hit est renseigné. TryGetComponent vérifie ensuite si l’élément touché est l’un de ceux qui vous intéressent : le rayon touche aussi le sol, le chemin et les arbres, qui ne possèdent pas de Paintable ; ces clics ne font donc rien.

Toutes les scènes présentées ici utilisent uniquement le système d’entrée de Unity 6, donc Mouse.current lit les informations de la souris. Sa position est exprimée en pixels à l’écran, ce qu’attend ScreenPointToRay.

challenge icon

Défi

Moyen

Les emplacements ont un script BuildPad, et l’objet Game possède un BuildManager dont le towerPrefab est le prefab ArrowTower.

  1. Dans BuildPad.cs, ajoute un champ public tower de type Tower : la tour construite sur cet emplacement, ou null.
  2. Dans BuildManager, ajoute un champ privé sérialisé towerPrefab (un Tower). Dans Update, lorsque le bouton gauche de la souris est enfoncé pendant cette image, lance un rayon depuis la caméra à travers la souris.
  3. Lorsque le rayon touche un collider qui possède un BuildPad, et que cet emplacement n’a pas encore de tour, instancie towerPrefab à la position de l’emplacement et stocke la nouvelle tour dans le tower de l’emplacement. Un emplacement avec une tour, ou tout ce qui n’est pas un emplacement, ne fait rien.

Appuie sur Play et clique sur quelques emplacements, puis sur Check.

Essayez vous-même

using UnityEngine;

// À venir : cliquer sur les emplacements de construction pour placer des tours, la boutique et le panneau des tours.
public class BuildManager : MonoBehaviour
{
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Jeu Unity : défense de tours