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 64 sur 67.

challenge icon

Défi

Moyen

Dernière étape : un score et un jeu qui devient plus difficile. Conserve tout ce qui a été fait dans les étapes précédentes et ajoute :

  • Un float nommé score qui compte les secondes de survie : ajoute le temps de la frame à cette valeur à chaque frame pendant que le jeu tourne.
  • Un champ speedUp défini dans l’Inspector (0.2). fallSpeed augmente de speedUp chaque seconde, un peu à chaque frame, pour que les blocs tombent de plus en plus vite.
  • En cas de collision, affiche Game over! Score: 12 au lieu de Game over, avec le nombre entier de secondes de score (convertis-le en int).

Appuie sur Play et essaie de battre ton score, puis clique sur Check.

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 = 0f;
            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);
            }
        }
    }
}

Toutes les leçons de Les bases du scripting dans Unity