Войти
Инди-ЮнитиФорум

Мастер класс по хорошему коду в юнити (27 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 123 24 25 26 27 28 Следующая »
#390
(Правка: 20:44) 20:42, 1 фев. 2021
у меня есть т.н. SaveManager - культура устанавливается в его конструкторе? Еще вопросы?

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

#391
(Правка: 20:46) 20:43, 1 фев. 2021
а можно прямо ответить?

Вот же:
сериализатор с поддержкой схем на подобие protobuf

Ключевое слово "схема" - через нее обеспечивается стабильность формата.

+ по ссылке, я не вижу исходников проекта

Ссылки в README на месте, сам генератор + либы поддержки для typescript и c#.

#392
20:44, 1 фев. 2021

Leopotam
> какой-то другой подобный менеджер не поменяет культуру на ту, которая будет ему
> более удобна?
проблема высосана из пальца, наверное оправдывает твой подход переустанавливать ее всегда :)

#393
(Правка: 20:49) 20:46, 1 фев. 2021

Leopotam
ответа так и нет :) лан, не важно, там по сути ничего нет - ни строчки кода )

загуглил

Для того чтобы определить структуру сериализуемых данных, необходимо создать .proto-файл с исходным кодом этой структуры.

ну такое себе решение, перебор в другую сторону, совсем отделен от кода

#394
20:49, 1 фев. 2021
наверное оправдывает твой подход

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

там по сути ничего нет - ни строчки кода )

Ну если ты не видишь ссылок в README - что-то не то с твоим браузером при отображении рендера маркдауна с github.

#395
20:50, 1 фев. 2021

Leopotam
> Ну если ты не видишь ссылок в README
только его и вижу

#396
20:51, 1 фев. 2021
только его и вижу

Ну так пролистай до конца, там будут линки:
на генератор: https://github.com/Leopotam/simplebinary-gen-node
на саппорт: https://github.com/Leopotam/simplebinary-cs
#397
(Правка: 20:56) 20:53, 1 фев. 2021

Leopotam
этот что ли

https://github.com/Leopotam/simplebinary-cs/blob/master/SimpleBin… Serializer.cs

ну тут совсем мало, нет маппинга

и где установка культуры? :)
#398
(Правка: 20:59) 20:58, 1 фев. 2021

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

и где установка культуры? :)

А зачем она в бинарном формате, где все контролируется на уровне байтиков с фиксированным Endian?

#399
21:01, 1 фев. 2021

Leopotam
я не вижу где реализация inv.Serialize (ref sbs); или чей это класс, если он стандартный?

#400
21:03, 1 фев. 2021

Leopotam
> все данные для сериализации в схеме, по которой генерится код
как она подается сериализатору тоже не вижу

#401
(Правка: 21:06) 21:05, 1 фев. 2021

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

"ClientMapEntry": {
    "mapId": "u8",
    "entryId": "u8"
},
Прогоняешь генератором и получаешь обвязку по типу такой:
public struct ClientMapEntry {
    public const ushort SB_PacketId = 7;
    public byte MapId;
    public byte EntryId;

    public static ClientMapEntry New() {
        ClientMapEntry v = default;
        return v;
    }

    public void Recycle() {
    }

    public static ClientMapEntry Deserialize(ref SimpleBinarySerializer sbs, bool withPacketType = true) {
        if (withPacketType && sbs.ReadU16() != SB_PacketId) { throw new Exception(); }
        var v = New();
        v.MapId = sbs.ReadU8();
        v.EntryId = sbs.ReadU8();
        return v;
    }

    public void Serialize(ref SimpleBinarySerializer sbs, bool withPacketType = true) {
        if (withPacketType) { sbs.WriteU16(SB_PacketId); }
        sbs.WriteU8(MapId);
        sbs.WriteU8(EntryId);
    }
}

"New()" и "Recycle()" нужны для реализации пулинга в случае вложенных коллекций, в данном типе их просто нет, поэтому методы пустые по сути.

#402
(Правка: 21:08) 21:07, 1 фев. 2021

tac
> а можно прямо ответить?
Кодогенерация типа протобуфа, если не знаешь как там сделано - поищи в гугле.
Код на гите там в разных репах для разных языков. Сам кодогенератор на js под ноду.

ага, не успел ответить...

#403
(Правка: 21:12) 21:08, 1 фев. 2021

Leopotam
> Прогоняешь генератором
тогда я не вижу его реализацию

seaman
> Сам кодогенератор на js под ноду.
а т.е. на шарпе его нет? ну, ок.. прохожу мимо

но про сам подход я написал

Для того чтобы определить структуру сериализуемых данных, необходимо создать .proto-файл с исходным кодом этой структуры.

ну такое себе решение, перебор в другую сторону, совсем отделен от кода

он все же лучше чем через аттрибуты, но далек от идеалаЮ, тем более через генерацию кода если ..

#404
21:12, 1 фев. 2021
ну, ок.. прохожу мимо

Я тоже теперь прохожу мимо шарпа :) ts / golang производительнее - один по скорости написания кода, второй по скорости выполнения.
Страницы: 123 24 25 26 27 28 Следующая »
Инди-ЮнитиФорум

Тема закрыта.