Size: a a a

2021 January 31

АТ

Александр Тужик... in Alprog I/O
Каждая из штук оптимизирована и заточена под конкретные нужды у него. Честно говоря, восхищаюсь таким.
источник

АТ

Александр Тужик... in Alprog I/O
ZZZubec(Salamandr)
Давно смотрел, уже и не помню деталей. Меня просто поразила причина таких манипуляций. Как вы потом отслеживаете связи в игре, вот тут мой мозг и взорвался. Надо подумать. Сам сейчас в работе, может чуть позже.
Каких манипуляций?
источник

Z

ZZZubec(Salamandr) in Alprog I/O
у вас есть ecs зачем вам что-то ещё. Я не пробовал хранить так много игровых данных. Всегда писал врапперы что ли, ByteArray, который паковал и распаковывал данные. Точнее он обращался к классу и говорил ему, пакуйся сюда. Каждый класс паковал себя сам. А когда нужно, происходила обратная распаковка. (ну как в Minecraft)
типо PutByte, GetByte. Более сложные разбивались на более простые, до байта (ну или бита).
Говорят вся прелесть protobuf в том что он работает быстрее из-за того что использует разрядность окружения. Особенности обработки данных в памяти.
источник

Z

ZZZubec(Salamandr) in Alprog I/O
Например каждый раз когда Java выделяет память, она увеличивается в 2 раза. Если знать эту особенность то можно использовать четкие границы объектов (размерность). И получится что много объектов использует один и тот же размер памяти. Ну это как пример, мне сказали что там что то такое же.
источник

АТ

Александр Тужик... in Alprog I/O
Подожди, ну ты путаешь всё в кучу. Можно рассматривать MessagePack и Protobuf исключительно, как бинарные протоколы.
источник

АТ

Александр Тужик... in Alprog I/O
И тогда всё сводится к PutByte и GetByte. Только можно не только байты, но и примитивные типы и некоторые другие вещи.
источник

АТ

Александр Тужик... in Alprog I/O
Делаешь PutInt, и если он меньше 127, то запишется 1 байт всего.
источник

АТ

Александр Тужик... in Alprog I/O
А если большие значения Int, то больше байт запишется. Ну и прочие такие микрооптимизации записи. А так-то это один фиг байтовый массив.
источник

АТ

Александр Тужик... in Alprog I/O
Вот. А можно ещё говорить об атрибуции.
источник

АТ

Александр Тужик... in Alprog I/O
Это вот эти [SerializeField] в юнити. Такие же есть аналоги в Protobuf-net, MessagePack и у нас тоже свои собственные.
источник

АТ

Александр Тужик... in Alprog I/O
Атрибуция - это просто способ легко и удобно аннотировать данные, чтобы не приходилось писать Save() и Load() которые "пакуют" класс.
источник

АТ

Александр Тужик... in Alprog I/O
Ты пишешь руками паковку и распаковку для каждого класса. А в сериализации с атрибуцией, всё это делается автоматически.
источник

АТ

Александр Тужик... in Alprog I/O
А есть ещё следующий уровень, когда ты понимаешь, что не все атрибуции одинаковы мощны.
источник

Z

ZZZubec(Salamandr) in Alprog I/O
Ну да, не пробовал использовать injection для своего блага))
источник

АТ

Александр Тужик... in Alprog I/O
Например, у юнити проблемы с циклическими ссылками. Проблемы с сериализацией свойств.
источник

АТ

Александр Тужик... in Alprog I/O
Что-то там ещё. Не помню уже, но прям очень много проблем.
источник

АТ

Александр Тужик... in Alprog I/O
Всякие там Odin, Protobuf и остальные имеют свои достоинства и недостатки.
источник

Z

ZZZubec(Salamandr) in Alprog I/O
Да как бы, они писали игровой движок. Глупо рассчитывать на что то ещё. Пусть это часть игры, но это уже скорее проблема разработчика.
источник

АТ

Александр Тужик... in Alprog I/O
Но ни у кого нет из коробки, например, распределённой сериализации. У юнити есть внутренняя для ассетов, но не уверен, что ей удастся пользоваться. Да и другие недостатки с лихвой перевешивают.
источник

АТ

Александр Тужик... in Alprog I/O
Можно трахаться с недостатками определённой сериализации, придумывать обходные пути.
источник