Menu
CoddyTech

Rückblick: Loot-Tabelle

Teil des Abschnitts Spielarchitektur in Unity der Unity-Journey von Coddy. Lektion 18 von 50.

challenge icon

Aufgabe

Einfach

Eine Schatztruhe lässt jedes Mal einen Gegenstand fallen, wenn du die Leertaste drückst. Schreibe LootChest.cs. Die Szene füllt ihre Beutetabelle im Inspector aus, daher müssen die Namen übereinstimmen:

  • Ein Enum Rarity mit Common, Rare, Epic und Legendary, in dieser Reihenfolge.
  • Eine Klasse LootEntry, die der Inspector anzeigen kann, mit einem String itemName, einem GameObject prefab und einer Rarity rarity, sowie an der Truhe einer öffentlichen List<LootEntry> namens table. Die Tabelle der Szene enthält den Apple und das Bread (Common), den Silver Ring (Rare), das Dragon Egg (Epic) und die Golden Crown (Legendary), in dieser Reihenfolge.
  • public int WeightOf(Rarity rarity) gibt das Gewicht eines Eintrags anhand seiner Seltenheit zurück: Common 10, Rare 4, Epic 2, Legendary 1. public int TotalWeight() summiert die Gewichte der gesamten Tabelle.
  • public LootEntry Pick(int roll) durchläuft bei einem Wurf von 0 bis, aber nicht einschließlich, TotalWeight() die Tabelle der Reihe nach; jeder Eintrag umfasst so viele Würfe wie sein Gewicht: Die Würfe 0 bis 9 ergeben den Apple, 10 bis 19 das Bread, 20 bis 23 den Silver Ring und so weiter.
  • Beim Drücken der Leertaste wird einmal Random.Range(0, TotalWeight()) aufgerufen, der entsprechende Eintrag ausgewählt, sein Prefab 1.5 Einheiten über der Truhe erzeugt und seine Seltenheit und sein Name protokolliert, etwa als Rare: Silver Ring.

Drücke Play, öffne die Truhe ein paar Mal und klicke dann auf Check.

Probier es selbst

using System.Collections.Generic;
using UnityEngine;

public class LootChest : MonoBehaviour
{
}

Alle Lektionen in Spielarchitektur in Unity