Пишем гибкий сервис сохранений в Unity (Storage Service)

Поделиться
HTML-код
  • Опубликовано: 11 июн 2024
  • Поддержи канал, бро!
    www.donationalerts.com/r/game...
    paypal.me/gamedevlavka
    Видео в формате, немного отличающемся от обычного - видеорассуждение. В новом видео я рассказываю не только как построить удобный, гибкий, классный сервис сохранений в игре (один из частых вопросов начинающих - как сделать сохранения в игре?), но и о том, как вообще мыслить при построении кода. Какие места нужно учитывать, как сделать код гибким, как думать о том, чтобы код покрыл как можно больше кейсов, но при этом не стал оверинжинирингом. В общем видео одновременно для тех, кто шарит за синтаксис кода, но хотел бы потренироваться в проектировании. Вот такая умная абоба. Смотрим!
    ___
    Лавка Разработчика в других соц. сетях, добавляйтесь!
    t.me/gamedevlavka - телеграм канал Лавки Разработчика
    t.me/gamedevtavern - ламповый чат
    / discord - дискорд
    gamedevlavka - вконтактик
    __________
    0:00 Вступление
    0:54 Пишем интерфейс сервиса
    6:13 Пишем реализацию: сохранение json в файл
    12:31 Пишем пример использования и разбираем плюсы

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

  • @maxwad
    @maxwad Год назад +4

    О, то, что я просил на стриме рассмотреть! Отлично, спасибо.) Как раз сейчас работаю над своей системой сохранений, посмотрю, правильной ли я дорожкой иду.)

  • @user-mm7ch3xw4e
    @user-mm7ch3xw4e Год назад +3

    Спасибо тебе за то, что ты делаешь! Красава!

  • @gendgee
    @gendgee Год назад +1

    Как всегда чётко Респект😊❤

  • @MrGolovewkin
    @MrGolovewkin Месяц назад +1

    Спасибо! Очень полезно!

  • @RimuruDev
    @RimuruDev Год назад +1

    Благодарствую❤

  • @alexsklyarov6792
    @alexsklyarov6792 Год назад +1

    Хорошее видео, спасибо. В методе Save для json, возвращает всегда true, а если неудача?

  • @yummybunny7351
    @yummybunny7351 Год назад

    Лавка, не используешь при создании нового скрипта RIder FIle templates или шаблоны файлов unity ?

  • @user-hq2wg8pg1l
    @user-hq2wg8pg1l Год назад +1

    Дай бог здоровья

  • @forcesoftheevil9252
    @forcesoftheevil9252 Год назад +1

    О, посмотрю после универа))

  • @aubreygraham6979
    @aubreygraham6979 Год назад +1

    Спасибо!

  • @thepoisonoflegend
    @thepoisonoflegend 5 месяцев назад +1

    В System.Text.Json есть JsonSerializer, который можно использовать вместо Newtonsoft

  • @StratoCatster
    @StratoCatster Месяц назад

    Андрей, а ты разве SaveAsync не вызываешь синхронно?
    а как же await и всё такое? =)

  • @hezangames4058
    @hezangames4058 9 месяцев назад

    Привет, а как мне сделать Populate data с дженерик типом? Или такая фишка не пройдет с JsonConvert?

  • @CLangMole
    @CLangMole 10 месяцев назад

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

  • @user-yx5mb4sz9t
    @user-yx5mb4sz9t Год назад +3

    Запиши пожалуйста видос по делегатам и как ими пользоваться, а то как-то непонятно особенно как в этом примере.

    • @gamedevlavka
      @gamedevlavka  Год назад +1

      Заметано

    • @gamedevlavka
      @gamedevlavka  Год назад +2

      Если что, уже есть на канале:
      ruclips.net/video/LVneePmOYKo/видео.html

  • @Bushido_Cat
    @Bushido_Cat 11 месяцев назад +1

    Это конечно круто, но где пример на реальном проекте, как созранить игру и загиузить сохранение. Такое впечатление, что сам только у кого-то посмотрел как сохранять строку и уже стал гуру, пошел учить всех.

  • @STIGRADOR
    @STIGRADOR Год назад

    Приветствую. Возникла проблема с вычитыванием из json unexpected character encountered while parsing value: c. path '', line 0, position 0. Хотя файл создает и данные в нем адекватно записаны. в пути нет никаких русских букв или других некорректных символов. Есть версия с чем может быть связана данная проблема?

    • @gamedevlavka
      @gamedevlavka  Год назад

      Привет, выведи в дебаг значение, которое он пытается распарсить

    • @STIGRADOR
      @STIGRADOR Год назад

      @@gamedevlavka именно это я и пытаюсь сделать. Вместо значения кидает эксепшен

    • @gamedevlavka
      @gamedevlavka  Год назад

      @@STIGRADOR нет, ты посмотри что он пытается распарсить, какую строку, до эксепшна

    • @STIGRADOR
      @STIGRADOR Год назад

      @@gamedevlavka эммм... Там одна строка. Одно лишь интовое поле и все или я не про то думаю?

    • @gamedevlavka
      @gamedevlavka  Год назад

      @@STIGRADOR не про это) я хотел бы увидеть, что ты считал из файла, не что ты видишь в блокноте, а что идёт на команду парсинга

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

    Спасибо!
    Что делать, если кто-то просит загрузку, а по данному ключу пусто?
    До этого был урок с шифрованным сейвом. Тогда шифровать надо было, а сейчас нет, почему так?
    Без негатива! просто никак не могу понять этого

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

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

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

      Причем здесь шифрование вообще? У тебя задача какая? Хочешь щифруй, хочешь нет.

  • @gingin9215
    @gingin9215 Год назад +3

    Жаль, что данного видео не было когда я учился делать сохранения. Я тогда убил на это два дня))

    • @JustELife
      @JustELife Месяц назад

      Зато сам написал =)

  • @johnlostark2117
    @johnlostark2117 Год назад +2

    Привет :)
    В конце видео ты создаешь параметр bool _isInProgressNow но нигде не изменяешь его состояние. И по сути этот параметер не работает а всегда FALSE

    • @FatherOfPeople
      @FatherOfPeople Год назад

      Да, никакого смысла в этом _isInProgressNow нет...
      SavaAsync метод должен выглядеть примерно так, для того что бы при преждевременном нажатии пробела, пока не закончился Task, показывалось сообщение "Data saved False", к примеру, ... И что бы SavaAsync не перезапускался пока не закончился.
      Я думаю именно по этому автор не продолжил этот пример, иначе бы пришлось объяснять больше материала.
      private async void SavaAsync(string key, object data, Action callback)
      {
      var path = BuildPath(key);
      var json = JsonConvert.SerializeObject(data);
      using (var fileStream = new StreamWriter(path))
      {
      _isInProgressNow = true;
      await Task.Delay(2000); // имитация ожитания
      await fileStream.WriteAsync(json);
      }

      _isInProgressNow = false;
      callback?.Invoke(true);
      }

  • @jabbensky461
    @jabbensky461 Год назад

    Ты про булевую забыл.

  • @RimuruDev
    @RimuruDev Год назад

    У вас есть LinkedIn?

    • @gamedevlavka
      @gamedevlavka  Год назад

      Конечно)
      www.linkedin.com/in/andrey-vavilichev-766bb9165/

    • @RimuruDev
      @RimuruDev Год назад

      @@gamedevlavka Thanks 🔥