Menu
CoddyTech

Survivre et marquer des points

Fait partie de la section Les bases du scripting dans Unity du Journey Unity de Coddy. Leçon 80 sur 85.

Cette étape termine Dodge the Blocks : un minuteur qui fait apparaître des blocs, une liste qui se déplace et se nettoie, une détection de collision et un score qui compte les secondes. (int) devant un nombre à virgule supprime sa partie décimale.

challenge icon

Défi

Moyen

Ajoute un score et des blocs qui tombent de plus en plus vite.

  1. Ajoute private float score; et [SerializeField] private float speedUp = 0.2f;.
  2. En haut de Update(), ajoute Time.deltaTime à score et speedUp * Time.deltaTime à fallSpeed.
  3. En cas de collision, journalise "Game over! Score: " + (int)score. (int) supprime la partie décimale : 12.7 s’affiche comme 12.

Appuie sur « Jouer » et survis : une collision journalise ton score. Puis clique sur « Vérifier ».

Essayez vous-même

using System.Collections.Generic;
using UnityEngine;

public class Runner : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    [SerializeField] private float laneEdge = 4f;
    [SerializeField] private GameObject blockPrefab;
    [SerializeField] private float spawnEvery = 1f;
    [SerializeField] private float fallSpeed = 5f;

    private List<GameObject> blocks = new List<GameObject>();
    private float timer;

    void Update()
    {
        Vector3 p = transform.position;
        p.x += Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
        p.x = Mathf.Clamp(p.x, -laneEdge, laneEdge);
        transform.position = p;

        timer += Time.deltaTime;
        if (timer >= spawnEvery)
        {
            timer -= spawnEvery;
            Vector3 spot = new Vector3(Random.Range(-laneEdge, laneEdge), 10f, 0f);
            blocks.Add(Instantiate(blockPrefab, spot, Quaternion.identity));
        }

        for (int i = blocks.Count - 1; i >= 0; i--)
        {
            blocks[i].transform.position += Vector3.down * fallSpeed * Time.deltaTime;
            Vector3 b = blocks[i].transform.position;
            if (Mathf.Abs(b.x - transform.position.x) < 1f && Mathf.Abs(b.y - transform.position.y) < 1f)
            {
                Debug.Log("Game over");
                enabled = false;
                return;
            }
            if (b.y < -1f)
            {
                Destroy(blocks[i]);
                blocks.RemoveAt(i);
            }
        }
    }
}
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 Les bases du scripting dans Unity

Entraînez-vous par vous-même : Playground Unity