Пишем гибкий сервис сохранений в 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 Пишем пример использования и разбираем плюсы
О, то, что я просил на стриме рассмотреть! Отлично, спасибо.) Как раз сейчас работаю над своей системой сохранений, посмотрю, правильной ли я дорожкой иду.)
Спасибо тебе за то, что ты делаешь! Красава!
Как всегда чётко Респект😊❤
Спасибо! Очень полезно!
Благодарствую❤
Хорошее видео, спасибо. В методе Save для json, возвращает всегда true, а если неудача?
Лавка, не используешь при создании нового скрипта RIder FIle templates или шаблоны файлов unity ?
Дай бог здоровья
О, посмотрю после универа))
Спасибо!
В System.Text.Json есть JsonSerializer, который можно использовать вместо Newtonsoft
Андрей, а ты разве SaveAsync не вызываешь синхронно?
а как же await и всё такое? =)
Привет, а как мне сделать Populate data с дженерик типом? Или такая фишка не пройдет с JsonConvert?
Я вот не пойму когда нажо использовать асинк войд и асинк таск, вроде все говорят что войд только для обработчика событий, но тут ты с ним сделал..
Запиши пожалуйста видос по делегатам и как ими пользоваться, а то как-то непонятно особенно как в этом примере.
Заметано
Если что, уже есть на канале:
ruclips.net/video/LVneePmOYKo/видео.html
Это конечно круто, но где пример на реальном проекте, как созранить игру и загиузить сохранение. Такое впечатление, что сам только у кого-то посмотрел как сохранять строку и уже стал гуру, пошел учить всех.
Приветствую. Возникла проблема с вычитыванием из json unexpected character encountered while parsing value: c. path '', line 0, position 0. Хотя файл создает и данные в нем адекватно записаны. в пути нет никаких русских букв или других некорректных символов. Есть версия с чем может быть связана данная проблема?
Привет, выведи в дебаг значение, которое он пытается распарсить
@@gamedevlavka именно это я и пытаюсь сделать. Вместо значения кидает эксепшен
@@STIGRADOR нет, ты посмотри что он пытается распарсить, какую строку, до эксепшна
@@gamedevlavka эммм... Там одна строка. Одно лишь интовое поле и все или я не про то думаю?
@@STIGRADOR не про это) я хотел бы увидеть, что ты считал из файла, не что ты видишь в блокноте, а что идёт на команду парсинга
Спасибо!
Что делать, если кто-то просит загрузку, а по данному ключу пусто?
До этого был урок с шифрованным сейвом. Тогда шифровать надо было, а сейчас нет, почему так?
Без негатива! просто никак не могу понять этого
Ничего не делай. Нет данных. Что ты модешь сделать? Ты задачу опиши, непонятно, какая у тебя проблема. Почему ты вообще обращаешься по несуществующему ключу.
Причем здесь шифрование вообще? У тебя задача какая? Хочешь щифруй, хочешь нет.
Жаль, что данного видео не было когда я учился делать сохранения. Я тогда убил на это два дня))
Зато сам написал =)
Привет :)
В конце видео ты создаешь параметр bool _isInProgressNow но нигде не изменяешь его состояние. И по сути этот параметер не работает а всегда FALSE
Да, никакого смысла в этом _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);
}
Ты про булевую забыл.
У вас есть LinkedIn?
Конечно)
www.linkedin.com/in/andrey-vavilichev-766bb9165/
@@gamedevlavka Thanks 🔥