Menu
CoddyTech

Drops

Lektion 14 von 19 im Kurs Unity-Spiel: Brick Breaker von Coddy.

Ein zerstörter Stein lässt manchmal ein Power-up fallen, das auf den Schläger zufällt. Ob es fällt, entscheidet ein Zufallswurf: Random.value ist eine zufällige Gleitkommazahl zwischen 0 und 1, daher ist Random.value < 0.15f ungefähr 15 von 100 Mal wahr. Wenn du die Chance in einem Feld speicherst, kannst du sie anpassen und in einem Test auf 1 setzen, damit jedes Mal ein Power-up fällt, oder auf 0, damit keines fällt.

Welches Power-up fällt, entscheidet ein zweiter Zufallswurf: ein zufälliger Index in einem Array von Prefabs. Random.Range schließt bei Ganzzahlen den Maximalwert aus, daher kann Random.Range(0, array.Length) jedes Element auswählen. Die Beute eines Gegners:

public GameObject[] loot;
public float lootChance = 0.25f;

void DropLoot()
{
    if (Random.value >= lootChance) return;
    int pick = Random.Range(0, loot.Length);
    Instantiate(loot[pick], transform.position, Quaternion.identity);
}

Ein Power-up fällt mit gleichmäßiger Geschwindigkeit, indem es sich in jedem Frame selbst bewegt, und zerstört sich selbst, sobald es sich unterhalb des Spielbereichs befindet, damit verpasste Power-ups sich nicht ansammeln. Sein Prefab hat ein kinematisches Rigidbody und einen Trigger-Collider. Dadurch weiß die Physik, dass es sich bewegt, und es kann erkennen, wann es den Schläger erreicht.

challenge icon

Aufgabe

Schwer

Zerbrochene Ziegel lassen manchmal ein Power-up fallen.

  1. Füge in PowerUp fallSpeed = 3f und bottomY = -9f hinzu; lasse das Objekt in Update() mit fallSpeed pro Sekunde fallen und zerstöre es unterhalb von bottomY.
  2. Füge in GameManager public GameObject[] powerUps; und public float dropChance = 0.15f; hinzu.
  3. Wenn in BrickBroken Random.value < dropChance gilt, instanziiere powerUps[Random.Range(0, powerUps.Length)] an der Position des Ziegels.

Drücke „Spielen“ und zerbrich Ziegel: Ab und zu lässt einer ein Power-up fallen (das Auffangen kommt als Nächstes). Drücke anschließend „Prüfen“.

Probier es selbst

using UnityEngine;

public class PowerUp : MonoBehaviour
{
    // Das letzte Kapitel: Power-ups, die aus zerstörten Blöcken fallen.
}

Alle Lektionen in Unity-Spiel: Brick Breaker

Übe selbstständig: Unity-Playground