Как сделать инвентарь в Unity. Часть 1: Модель, абстракция

Поделиться
HTML-код
  • Опубликовано: 1 июн 2024
  • Понравилось видео? Поддержи Лавку Разработчика!
    www.donationalerts.com/r/game...
    boosty.to/gamedevlavka
    paypal.me/gamedevlavka
    Стыдно признать, но я решил переделать серию видео про инвентарь. Снова. Прошу прощения за это! Теперь я проработал полный цикл, знаю, что в каждом рассказать, чтобы это стало органичным и хорошо легло в голову не только как фича, а как подход к разработке, о котором я рассказывал в предыдущем видео (Зачем разделять модель и визуал игры: • Зачем разделять модель... )
    В этом видео мы начнем разработку инвентаря с разделением на модель и представление, как это сделать и почему это делается так - в новом видео из Лавки Разработчика!
    Отсылки:
    t.me/gamedevlavka - телеграм канал Лавки Разработчика
    t.me/gamedevtavern - ламповый чат
    / discord - дискорд
    __________
    0:00 Предисловие (ною)
    1:29 Описываем техническое задание на инвентарь
    3:30 Определяем данные (что будем сохранять)
    6:48 Пишем интерфейсы
    12:12 Пишем реализации
    23:48 Пишем вью (только для теста)
    26:26 Пишем точку входа (для теста)
    31:43 Пару слов о разделении модели и представления

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

  • @qiweivaneevmaksim9074
    @qiweivaneevmaksim9074 10 дней назад

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

  • @wsxpocxeafx
    @wsxpocxeafx 15 дней назад

    32:42 Интерфейс это не защита от злоумышленника, это защита от случайной ошибки программиста. Можно не только интерфейс привести к конкретному классу, можно в интерфейс дописать сеттер и вуаля, ты можешь писать туда, куда писать было нельзя. Но если хочется, чтобы приведение не работало, можно написать обертку над моделью, реализующий ReadOnly интерфейс, в обертку передавать в конструктор саму модель, тогда приведение уже работать не будет, но будет один дополнительный класс к каждому классу, который в твоём коде реализует интерфейс.

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

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

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

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

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

      Крик слоты это можно будет устроить, после

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

    От простого к сложному, однозначно лайк)

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

    Like + Share не глядя. После рабочей смены обязательно наслажусь этим материалом♥

  • @user-ve3hp4eg3f
    @user-ve3hp4eg3f 3 месяца назад +2

    Референс отличный, буду очень ждать всей серии роликов по инвентарю!

  • @user-pj8yy1ko1i
    @user-pj8yy1ko1i Месяц назад

    взаимодействие вьюшки и модели с помощью прослойки это что-то вроде MVVM паттерна, хорошая реализация!
    edit: но я думаю тут больше как MVP (model, view, presenter)

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

    Люблю страшные и долгие ролики... Придётся привыкать к красивым и долгим)

  • @user-us2mp6yw6n
    @user-us2mp6yw6n 2 месяца назад +1

    Ждем новый цикл по инвентарю, чтобы в каждом слоте хранилась реальная item, и у нее есть "прочность", кол-во патронов внутри, а ещё рюкзак внутри рюкзака внутри рюкзака

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

    О наконец новый видос, класс👍

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

    Безмерно благодарен, конструктивное видео с полезной информацией сегодня редкость 👍

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

    Очень ждем твой курс!😊

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

    Отличное видео. Жду продолжения.

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

    Спасибо, жду продолжение!

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

    Насчет сложности согласен, в некоторых ролика уследить за мыслью, любителю, очень сложно

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

    Очень жду вторую часть)❤

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

    Спасибо большое за труд!

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

    Красавчик, всё предельно понятно

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

    Как всгда топовый контент по Unity

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

    Ой ну огнина же! как же ты хорош.

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

    Ждем Продолжение!!!!!!

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

    Ждем продолжение

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

    Лайк этому герою

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

    ролик про борьбу с читерами без "страшного кода" +

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

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

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

    ❤‍🔥

  • @mr.flizzik2750
    @mr.flizzik2750 3 месяца назад +1

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

    Спасибо, отличный урок! Вы выбрали двумерный массив для инвентаря, таким образом мы сильно связано представление, не лучше ли сделать одномерным массивом или списком, где будет только порядковый индекс?

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

      Вроде как инвентарь как раз таки и есть список, а метод GetSlots() всего лишь копирует этот список в двумерный массив и вызывается он во View, т.к. на выходе во View мы хотим получить сетку. Если я не ошибаюсь, то можно было бы возвращать из метода и список, а во View уже делать с ним что угодно, в том числе и отображать в виде сетки. Вот как вообще понять подобные тонкости? Где лучше преобразовывать список в двумерный массив? В данном методе GetSlots() или всё таки в методе класса View, просто для вывода в виде сетки?

    • @alexandrkotov2094
      @alexandrkotov2094 День назад

      ​@@KerryBlackSun зависит от того, связана ли с этими клетками какая то механика. Если это просто для отрисовки - можно и во вью

  • @user-tv9oi3xf1w
    @user-tv9oi3xf1w 3 месяца назад +1

    Подскажи плиз, что за ide используешь. VS чет не удобен мне 🥲

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

      Я юзаю Rider, лучше пока не встречал

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

    По сути, View не обязательно знать даже о ридонли инвентарных предметах, все что должен получать view, это даннве мостоящие из ади предмета его количества и процента прочности, при необходимости, все что нужно View, плюс он должен мочь ассоциировать айди предмета с UI спрайтом. Ну и там события, что бы прослойка которая представляет бизнес логику инвентаря в удобоваримом для View виде подписывалась на эти ивенты и уведомляла бизнес модель о вводе с ui, в таком случае, наше представление инвентаря в бизнес логике не зависит от того, как презентер интерпретирует его для UI, условно это даже может быть словарь с парой айдипредмета - его количество, или даже, если у нас предмет хранится в какой то базе данных, ключь айди и в значении пара, количество и ссылка на БД, откуда и будут подсасываться все данные о предмете.

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

      Такой подход позволяет не заострять внимание в бизнес логике, в каком конкретно порчдке выложены в UI предметы, или как разделены стаки, и как пользователь с ними хочет взаимодействовать. В идее такую систему можно спокойно применять и с ивнвенатрём где предмет занимает несколько клеток.

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

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

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

    А если требуется прокачивать предмет? Ну например уровень у предмета есть, или предмет со вставками какими-то.

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

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

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

    А почему int в айдишнике для извщ? Производительнее же должно быть. Или это чисто для понятности, т.к. обучающий проект?

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

      Производительнее.
      1. Если у тебя не мультиплеер с кучей интеракций с инвентарь, то плюсы от производительности сходят на нет, а отладка страдает, вывести в лог удобрчитаемые данные сложнее. На моем опыте ид в виде int встречается только в высоконагруженных местах мультиплеера.
      2. Да, обучающий, и по причине неудобного логирования, в том числе выбрана строка.
      А так, без разницы, когда будешь работать с инвентарь, поменяй все на int - будет работать оптимизированнее

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

    Когда вторая часть?

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

      Полагаю на следующей неделе будет

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

    eeeeee😀

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

    Видос топ, намного легче усваивается материал, отличное решение