Menu
CoddyTech

Podsumowanie: losowanie łupów

Część sekcji Architektura gier w Unity ścieżki Unity w Coddy. Lekcja 22 z 64.

W tym rozdziale umieszczono w Inspektorze klasy możliwe do serializacji, listy i typy wyliczeniowe, a tabela skrzyni korzysta ze wszystkich trzech. Teraz skrzynia losuje z tej tabeli.

challenge icon

Wyzwanie

Łatwy

Naciśnij spację, aby otworzyć skrzynię i upuścić jeden przedmiot z uwzględnieniem jego wagi.

  1. Napisz public LootEntry Pick(int roll): przejdź przez table; zwróć wpis, gdy roll jest mniejsze od jego wagi, w przeciwnym razie odejmij wagę. Po pętli użyj return null;.
  2. Po naciśnięciu spacji wybierz przedmiot za pomocą Random.Range(0, TotalWeight()), utwórz jego prefab 1.5 jednostki nad skrzynią i zapisz w logu entry.rarity + ": " + entry.itemName.

Naciśnij „Graj” i spację: najczęściej pojawi się Common: Apple lub Bread. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public enum Rarity { Common, Rare, Epic, Legendary }

[System.Serializable]
public class LootEntry
{
    public string itemName;
    public GameObject prefab;
    public Rarity rarity;
}

public class LootChest : MonoBehaviour
{
    public List<LootEntry> table;

    public int WeightOf(Rarity rarity)
    {
        switch (rarity)
        {
            case Rarity.Common: return 10;
            case Rarity.Rare: return 4;
            case Rarity.Epic: return 2;
            case Rarity.Legendary: return 1;
        }
        return 0;
    }

    public int TotalWeight()
    {
        int total = 0;
        foreach (LootEntry entry in table) total += WeightOf(entry.rarity);
        return total;
    }

    // Tutaj należy umieścić Pick(int roll) oraz otwieranie skrzyni klawiszem Space
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Architektura gier w Unity

Poćwicz samodzielnie: Edytor online Unity