Выбор и удаление слота
Часть раздела Архитектура игр в Unity путешествия по Unity на Coddy. Урок 34 из 64.
В этой главе мы записывали сохранения в формате JSON: класс сохранения [System.Serializable], файлы в Application.persistentDataPath и инициализаторы полей, которые заполняют недостающие данные в старом сохранении. Теперь в меню слотов появляются два последних элемента управления.
Задание
СреднеПозвольте игроку выбрать слот и удалить его.
- В
Update()стрелка вниз увеличиваетselectedна 1, а стрелка вверх уменьшает его на 1; значение ограничивается диапазоном от 0 до 2 с помощьюMathf.MinиMathf.Max. Затем вызываетсяShow(). DeleteSelected()удаляет файл выбранного слота с помощьюFile.Delete, присваивает слоту значениеnullи вызываетShow().
Нажмите «Играть», заполните слот 3 и нажмите «Удалить»: он отображается как пустой. Затем нажмите «Проверить».
Попробуйте сами
using System.IO;
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
public class SlotMenu : MonoBehaviour
{
public TMP_Text[] slotTexts;
private SlotSave[] slots = new SlotSave[3];
private int selected;
void Start()
{
for (int i = 0; i < slots.Length; i++)
{
if (File.Exists(PathFor(i)))
{
slots[i] = JsonUtility.FromJson<SlotSave>(File.ReadAllText(PathFor(i)));
}
}
Show();
}
void Update()
{
// Стрелки выбирают слот
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
if (slots[selected] == null)
{
slots[selected] = new SlotSave();
}
else
{
slots[selected].day++;
slots[selected].gold += 15;
}
File.WriteAllText(PathFor(selected), JsonUtility.ToJson(slots[selected]));
Show();
}
}
// Кнопка Delete вызывает этот метод
public void DeleteSelected()
{
}
string PathFor(int index)
{
return Path.Combine(Application.persistentDataPath, "slot" + (index + 1) + ".json");
}
void Show()
{
for (int i = 0; i < slots.Length; i++)
{
string line = "Slot " + (i + 1) + ": ";
if (slots[i] == null)
{
line += "empty";
}
else
{
line += "Day " + slots[i].day + ", " + slots[i].gold + " gold";
}
if (i == selected)
{
line = "> " + line;
}
slotTexts[i].text = line;
}
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Архитектура игр в Unity
1Компоненты, а не иерархии
Небольшие компонентыБазовый скрипт врагаАбстрактные компонентыКомпоненты работают вместеПовторение: модульная турельПовторение: спаренная пушка4Сериализованные данные
Сериализуемые классыСписки в инспектореПеречисления в инспектореПовторение: таблица добычиПовторение: определяем добычу2Интерфейсы в Unity
IDamageableИнтерфейсы и TryGetComponentGetComponentsПовторение: клавиша взаимодействияПовторение: ближайший в пределах досягаемости5ScriptableObjects
Ресурсы данныхХарактеристики оружияОбщие настройкиСохраняем ветерВолны как данныеПовторение: база предметовПовторение: покупка в магазинеПотренируйтесь самостоятельно: Песочница Unity