Повторение: определяем добычу
Часть раздела Архитектура игр в Unity путешествия по Unity на Coddy. Урок 22 из 64.
В этой главе мы добавили сериализуемые классы, списки и перечисления в Inspector, и в таблице сундука используются все три. Теперь сундук выбирает предмет из этой таблицы.
Задание
ЛегкоСделай так, чтобы клавиша Space открывала сундук и выпадал один предмет с учётом его веса.
- Напиши
public LootEntry Pick(int roll): пройди поtable; верни запись, если значениеrollменьше её веса, иначе вычти вес. После цикла —return null;. - При нажатии 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
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Архитектура игр в Unity
1Компоненты, а не иерархии
Небольшие компонентыБазовый скрипт врагаАбстрактные компонентыКомпоненты работают вместеПовторение: модульная турельПовторение: спаренная пушка4Сериализованные данные
Сериализуемые классыСписки в инспектореПеречисления в инспектореПовторение: таблица добычиПовторение: определяем добычу2Интерфейсы в Unity
IDamageableИнтерфейсы и TryGetComponentGetComponentsПовторение: клавиша взаимодействияПовторение: ближайший в пределах досягаемости5ScriptableObjects
Ресурсы данныхХарактеристики оружияОбщие настройкиСохраняем ветерВолны как данныеПовторение: база предметовПовторение: покупка в магазинеПотренируйтесь самостоятельно: Песочница Unity