Menu
CoddyTech

Revisão: Sorteie o Loot

Parte da seção Arquitetura de Jogos no Unity do Journey de Unity da Coddy. Lição 22 de 64.

Este capítulo colocou classes serializáveis, listas e enums no Inspector, e a tabela do baú usa os três. Agora o baú faz uma rolagem com base nela.

challenge icon

Desafio

Fácil

Faça com que Space abra o baú e solte um item de acordo com o peso.

  1. Escreva public LootEntry Pick(int roll): percorra table; retorne a entrada quando roll for menor que o peso dela; caso contrário, subtraia o peso. Após o loop, return null;.
  2. Ao pressionar Space, escolha com Random.Range(0, TotalWeight()), gere o prefab 1.5 unidades acima do baú e registre entry.rarity + ": " + entry.itemName.

Pressione “Jogar” e Space: na maioria das vezes, Common: Apple ou Bread. Depois, “Verificar”.

Experimente você mesmo

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;
    }

    // Pick(int roll) e a lógica para abrir o baú com Space ficam aqui
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Arquitetura de Jogos no Unity

Pratique por conta própria: Playground de Unity