Как сделать инвентарь в 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 Пример использования и тесты

Комментарии • 29

  • @gamekill9419
    @gamekill9419 17 дней назад +1

    Спасибо огромное как раз ищу небольной инвентарь для пет проекта

  • @user-kr5mh2vd3v
    @user-kr5mh2vd3v 3 месяца назад +5

    Хочу отдельное видео про конфиги, чтобы все было по красоте

  • @justsimon_
    @justsimon_ 2 месяца назад +1

    Отдельно интересующий вопрос касающийся мета даты у предметов инвентаря.
    Конкретно интересно, как сохранять данные модулей на оружие, если это пушка и подобное.
    Пример из майнкрафта - зачарования.
    Тоже хотелось бы увидеть на канале.

  • @StratoCatster
    @StratoCatster 3 месяца назад

    Ох, когда я сам писал эту модель с нуля я думал, что упоролся)

  • @brainwashing5576
    @brainwashing5576 2 месяца назад +1

    Метод RemoveItems я бы переименовал в RemoveItem, потому что неявный аргумент amount = 1, может запутать читающего, он подумает что удаляются все предметы с этим названием. а явное указание amount поможет домыслить смысл метода.
    Пишу не ради критики, а ради комментария хорошему видео.

  • @maksymz6695
    @maksymz6695 18 дней назад +1

    Почему переменные в начале класса с большой буквы, а в конструкторе с маленькой? Я все не могу понять синтаксис C#

    • @gamedevlavka
      @gamedevlavka  16 дней назад

      Есть различные конвенции для нейминга всякого, обычно пользуются классикой от майкрософт:
      learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/identifier-names

  • @domiurk
    @domiurk 3 месяца назад +1

    класне відео мені сподобалось, чекаю продовження з UI, о і таке питання, чи буде відео про те як ти це все грузиш через SO чи тому подібне

    • @gamedevlavka
      @gamedevlavka  2 месяца назад

      Будет видео о сохранении, могу приделать видео о конфигах. Не уверен, что конфиги прям к теме инвентаря приделаны будут, но сниму, да

  • @alekseystepanov4108
    @alekseystepanov4108 3 месяца назад +3

    Добавте пожплуйста в модель сохранение\чтение (где, когда, в каком формате?)

    • @gamedevlavka
      @gamedevlavka  3 месяца назад +1

      Да, это тоже сделаем)

  • @dem8683
    @dem8683 2 месяца назад

    Видос по изменеиню сайзинга +, если можно. Слишком много полезной инфы. Хотелось бы по максимуму проработать

  • @nepochat
    @nepochat 3 месяца назад +1

    💥💥💥

  • @domiurk
    @domiurk 3 месяца назад +1

    коли пишеш ctor то в Rider повинна бути штука ctorf і ctorp що роблять конструктор для полів і для властивостей відповідно

    • @gamedevlavka
      @gamedevlavka  2 месяца назад

      звучит круто, надо затестить

  • @exregisterqq
    @exregisterqq 3 месяца назад

    классная реализация, особенно понравился момент с возвращением результата в виде структуры)
    но есть вопрос на счет owner id. зачем его хранить внутри самой сущности инвентаря? ему ведь глобально пофиг чей инвентарь, у нас все равно принадлежность определяется и будет обрабатываться извне. айдишник, считай, в твоей архитектуре нужен чисто для возвращения результата добавления/удаления. и то он по моему там не нужен, как и amount, о котором ты говорил

    • @exregisterqq
      @exregisterqq 3 месяца назад

      и еще не совсем понимаю смысла от хранения всех инвентарей в одном сервисе. нам ведь понадобится прослойка, связывающая модель и ui и как ты тогда ее планируешь припихнуть?

    • @gamedevlavka
      @gamedevlavka  3 месяца назад +1

      Насчёт ownerId, тут вопрос того, как будет храниться данные. Если в виде профиля, то внутри данных Owner не нужен, если инвентари отдельным списком - то внутри ownerId нужен. Полный профиль не всегда удобно хранить и не всегда это полезно для оптимизации

    • @gamedevlavka
      @gamedevlavka  3 месяца назад +1

      А прослойку в след видео будет

  • @ARTIFAYT
    @ARTIFAYT 3 месяца назад +1

    0.0 🎉🎉🎉

  • @konstantin9484
    @konstantin9484 2 месяца назад

    Почему в 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;
    }

    • @gamedevlavka
      @gamedevlavka  2 месяца назад

      Все так, видимо, сработала привычка "на всякий случай", или для лучшего понимания. Я вообще часто создаю дополнительные переменные с норм неймингом, чтобы повысить читаемость. В данном случае ты прав, совсем не обязательно выносить в переменную значение remainingAmount

    • @konstantin9484
      @konstantin9484 2 месяца назад

      @@gamedevlavka Спасибо за ответ, обязательно продолжу остальные части смотреть)

  • @user-yw2ub8mb5b
    @user-yw2ub8mb5b 2 месяца назад

    А как сделать слоты только для определенной группы предметов? Например, слоты только для шлемов, или только для оружия

    • @gamedevlavka
      @gamedevlavka  2 месяца назад

      Звучит как слоты для экипировки. Про это речь?

    • @user-yw2ub8mb5b
      @user-yw2ub8mb5b 2 месяца назад

      @@gamedevlavka да

    • @gamedevlavka
      @gamedevlavka  2 месяца назад +1

      @@user-yw2ub8mb5b это не часть механики инвентаря, это часть механики экипировка. То есть в окошке, что ты видишь, когда перекладываешь из инвентаря в экипировку - ты взаимодействуешь с двумя механиками. И слот экипировки в свою очередь может проверять тип предмета, как ему это нравится

    • @user-yw2ub8mb5b
      @user-yw2ub8mb5b 2 месяца назад

      @@gamedevlavka понял, спасибо