Как сделать инвентарь в Unity. Часть 2: Модель, математика
HTML-код
- Опубликовано: 1 июн 2024
- Понравилось видео? Поддержи Лавку Разработчика!
www.donationalerts.com/r/game...
boosty.to/gamedevlavka
paypal.me/gamedevlavka
Стыдно признать, но я решил переделать серию видео про инвентарь. Снова. Прошу прощения за это! Теперь я проработал полный цикл, знаю, что в каждом рассказать, чтобы это стало органичным и хорошо легло в голову не только как фича, а как подход к разработке, о котором я рассказывал в предыдущем видео (Зачем разделять модель и визуал игры: • Зачем разделять модель... )
В этом видео мы начнем разработку инвентаря с разделением на модель и представление, как это сделать и почему это делается так - в новом видео из Лавки Разработчика!
Отсылки:
t.me/gamedevlavka - телеграм канал Лавки Разработчика
t.me/gamedevtavern - ламповый чат
/ discord - дискорд
__________
0:00 Предисловие
1:21 Самые нужные методы в инвентаре
3:19 Нужен фидбек от добавления и удаления предметов
6:35 Добавление предмета в ячейку инвентаря
12:08 Удаление предмета из ячейки инвентаря
13:12 Добавление предмета в инветарь
21:00 Удаление предмета из инвентаря
23:32 Получить количество предметов в инвентаре
24:00 Проверка, есть ли предметы в инвентаре
24:20 Свап содержимого ячеек инвентаря
25:14 Пару слов об изменении размера инвентаря
26:31 Сервис инвентарей
28:21 Регистрация данных инвентаря в сервисе
30:05 Получение инвентаря из сервиса
30:38 Пример использования и тесты
Спасибо огромное как раз ищу небольной инвентарь для пет проекта
Хочу отдельное видео про конфиги, чтобы все было по красоте
И такое будет
Отдельно интересующий вопрос касающийся мета даты у предметов инвентаря.
Конкретно интересно, как сохранять данные модулей на оружие, если это пушка и подобное.
Пример из майнкрафта - зачарования.
Тоже хотелось бы увидеть на канале.
Ох, когда я сам писал эту модель с нуля я думал, что упоролся)
Метод RemoveItems я бы переименовал в RemoveItem, потому что неявный аргумент amount = 1, может запутать читающего, он подумает что удаляются все предметы с этим названием. а явное указание amount поможет домыслить смысл метода.
Пишу не ради критики, а ради комментария хорошему видео.
Почему переменные в начале класса с большой буквы, а в конструкторе с маленькой? Я все не могу понять синтаксис C#
Есть различные конвенции для нейминга всякого, обычно пользуются классикой от майкрософт:
learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/identifier-names
класне відео мені сподобалось, чекаю продовження з UI, о і таке питання, чи буде відео про те як ти це все грузиш через SO чи тому подібне
Будет видео о сохранении, могу приделать видео о конфигах. Не уверен, что конфиги прям к теме инвентаря приделаны будут, но сниму, да
Добавте пожплуйста в модель сохранение\чтение (где, когда, в каком формате?)
Да, это тоже сделаем)
Видос по изменеиню сайзинга +, если можно. Слишком много полезной инфы. Хотелось бы по максимуму проработать
💥💥💥
коли пишеш ctor то в Rider повинна бути штука ctorf і ctorp що роблять конструктор для полів і для властивостей відповідно
звучит круто, надо затестить
классная реализация, особенно понравился момент с возвращением результата в виде структуры)
но есть вопрос на счет owner id. зачем его хранить внутри самой сущности инвентаря? ему ведь глобально пофиг чей инвентарь, у нас все равно принадлежность определяется и будет обрабатываться извне. айдишник, считай, в твоей архитектуре нужен чисто для возвращения результата добавления/удаления. и то он по моему там не нужен, как и amount, о котором ты говорил
и еще не совсем понимаю смысла от хранения всех инвентарей в одном сервисе. нам ведь понадобится прослойка, связывающая модель и ui и как ты тогда ее планируешь припихнуть?
Насчёт ownerId, тут вопрос того, как будет храниться данные. Если в виде профиля, то внутри данных Owner не нужен, если инвентари отдельным списком - то внутри ownerId нужен. Полный профиль не всегда удобно хранить и не всегда это полезно для оптимизации
А прослойку в след видео будет
0.0 🎉🎉🎉
Почему в 19:03 важно работать с копией? Что если написать такой код?
slot.ItemId = itemId;
int maxCapacity = GetItemMaxCapacity(itemId);
if (remainingAmount > maxCapacity)
{
slot.Amount = maxCapacity;
remainingAmount -= maxCapacity;
totalAmountAdded += maxCapacity;
}
else
{
slot.Amount = remainingAmount ;
totalAmountAdded += remainingAmount ;
remainingAmount = 0;
return totalAmountAdded;
}
Все так, видимо, сработала привычка "на всякий случай", или для лучшего понимания. Я вообще часто создаю дополнительные переменные с норм неймингом, чтобы повысить читаемость. В данном случае ты прав, совсем не обязательно выносить в переменную значение remainingAmount
@@gamedevlavka Спасибо за ответ, обязательно продолжу остальные части смотреть)
А как сделать слоты только для определенной группы предметов? Например, слоты только для шлемов, или только для оружия
Звучит как слоты для экипировки. Про это речь?
@@gamedevlavka да
@@user-yw2ub8mb5b это не часть механики инвентаря, это часть механики экипировка. То есть в окошке, что ты видишь, когда перекладываешь из инвентаря в экипировку - ты взаимодействуешь с двумя механиками. И слот экипировки в свою очередь может проверять тип предмета, как ему это нравится
@@gamedevlavka понял, спасибо