Menu
CoddyTech

Повторение: определяем добычу

Часть раздела Архитектура игр в Unity путешествия по Unity на Coddy. Урок 22 из 64.

В этой главе мы добавили сериализуемые классы, списки и перечисления в Inspector, и в таблице сундука используются все три. Теперь сундук выбирает предмет из этой таблицы.

challenge icon

Задание

Легко

Сделай так, чтобы клавиша Space открывала сундук и выпадал один предмет с учётом его веса.

  1. Напиши public LootEntry Pick(int roll): пройди по table; верни запись, если значение roll меньше её веса, иначе вычти вес. После цикла — return null;.
  2. При нажатии Space выбери предмет с помощью Random.Range(0, TotalWeight()), создай его prefab на высоте 1.5 единицы над сундуком и выведи в лог entry.rarity + ": " + entry.itemName.

Нажми «Играть» и Space: чаще всего выпадает Common: Apple или Bread. Затем нажми «Проверить».

Попробуйте сами

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) и открытие сундука по нажатию Space
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Архитектура игр в Unity

Потренируйтесь самостоятельно: Песочница Unity