Найти в Дзене

№240. Собираем простенький инвентарь. №3.

Продолжаем.
(если пропустили - первая и вторая части) В этой части допишем логику для манипуляций внутри инвентаря. Вынос иконок из инвентаря, а так же сохранение и запись состояния инвентаря. Для начала вынесем создание нового временного спрайта в отдельную функцию. Это чуть сократит общий код, и освободит место для нового. И в основном коде пропишем вызов этой функции там, где мы обычно делали сам спрайт ранее. Теперь добавим развилку. Если кликаем на игровом поле - логика одна. Если в инвентаре то будет чуть иная.
Пока пропишем только создание спрайта. Если сейчас запустить код, то перетаскивание будет работать и на незанятых ячейках. Посему дописываем условие на проверку текущей текстуры у ячейки. Теперь с этим порядок. Если иконка есть , то мы можем создавать и двигать спрайт. При отпускании мышки валятся ошибки. Очевидно что тут нужно как то понимать , мы кладем в ячейку иконку с поля, или же перекладываем инвентарь.
В качестве решения мы можем явно указать иконке, например через

Продолжаем.
(если пропустили -
первая и вторая части)

В этой части допишем логику для манипуляций внутри инвентаря. Вынос иконок из инвентаря, а так же сохранение и запись состояния инвентаря.

Для начала вынесем создание нового временного спрайта в отдельную функцию. Это чуть сократит общий код, и освободит место для нового.

И в основном коде пропишем вызов этой функции там, где мы обычно делали сам спрайт ранее.

-2

Теперь добавим развилку. Если кликаем на игровом поле - логика одна. Если в инвентаре то будет чуть иная.
Пока пропишем только создание спрайта.

-3

Если сейчас запустить код, то перетаскивание будет работать и на незанятых ячейках. Посему дописываем условие на проверку текущей текстуры у ячейки.

-4

Теперь с этим порядок. Если иконка есть , то мы можем создавать и двигать спрайт.

-5

При отпускании мышки валятся ошибки. Очевидно что тут нужно как то понимать , мы кладем в ячейку иконку с поля, или же перекладываем инвентарь.
В качестве решения мы можем явно указать иконке, например через мета данные, что это именно иконка.

Переходим в префаб иконки и добавляем мету. Я добавил тип bool , но в целом это неважно так как мы будем проверять не состояние , а просто наличие.

-6

Вернемся в главную сцену и пропишем код который будет проверять , есть мета или нет :

-7

И теперь если у нас падает иконка в инвентарь -получаем true
А если перемещается инвентарь то false.

-8

Теперь можем добавлять логику именно для инвентарных иконок.

Чуть переформатируем код.
Раскинем логику на два блока - работа над инвентарем и работа на поле.
Внутри этих блоков мы будем проверять что именно мы бросаем.

-9

Проверяем :

-10

Осталось поправить один момент - невозможность класть в уже занятую ячейку.

Для этого будем проверять в момент отпускания мышки текстуру в ячейке. Если там текстура от свободной ячейки , то можем класть. В противном случае откатываемся.

-11

На гифке ниже видно что всё работает как и ожидалось.
Ставить новые иконки на занятые ячейки мы не можем.
Мусорных файлов не остается. Всё ненужное удаляется.

-12

На гифке так же заметно что у меня в сцене появились две кнопки для сохранения и загрузки. Значит пришло время сохранения и загрузки инвентаря из файла.
Тут максимально всё просто : Мы пробегаемся по всем ячейкам инвентаря, и записываем все ссылки на текстуры в массив.

-13

Я сохраняю в обычный текстовый файл, без шифрования. Вы же можете сделать как то иначе.
Соответственно при загрузке нам надо просто пробежаться по файлу и установить ячейкам эти сохраненные текстуры.

-14
-15

( ссылка на res:// тут просто от лени. По уму надо использовать USER)

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

Но конечно же можно оперировать переменными. Складировать всю нужную информацию внутри иконок - описания иконок, короткие имена , какие-то альтернативные данные, спрайты и прочее.

Но на этом пока всё.
Возможно, если отклик будет положительный напишу еще одну часть - применение иконок из инвентаря на игровом поле.

Подписывайтесь на канал, при желании вступайте в группу в ВК.
Удачи в изучении годо