Menu
CoddyTech

Überleben und punkten

Teil des Abschnitts Unity-Scripting: Grundlagen der Unity-Journey von Coddy. Lektion 80 von 85.

Dieser Schritt schließt Dodge the Blocks ab: einen Timer, der Objekte erzeugt, eine Liste, die sich bewegt und aufräumt, eine Kollisionserkennung und einen Punktestand, der die Sekunden zählt. (int) vor einem Float verwirft dessen Nachkommastellen.

challenge icon

Aufgabe

Mittel

Füge eine Punktzahl hinzu und Blöcke, die immer schneller fallen.

  1. Füge private float score; und [SerializeField] private float speedUp = 0.2f; hinzu.
  2. Addiere am Anfang von Update() Time.deltaTime zu score und speedUp * Time.deltaTime zu fallSpeed.
  3. Protokolliere bei einem Treffer "Game over! Score: " + (int)score. Mit (int) wird der Bruchteil abgeschnitten: 12.7 wird als 12 angezeigt.

Drücke „Spielen“ und überlebe: Bei einem Treffer wird deine Punktzahl protokolliert. Drücke anschließend „Prüfen“.

Probier es selbst

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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Unity-Scripting: Grundlagen

Übe selbstständig: Unity-Playground