SyncList
SyncLists является массивом, основанном на листах, похожих на C# List который синхронизирует свое содержимое с сервера на клиенты.
SyncList может содержать в себе любые поддерживаемые типы данных Mirror.
Различия с UNET
UNET также поддерживает SyncLists, но мы переработали их архитектуру, чтобы сделать более эффективными и простыми в использовании. Некоторые из ключевых отличий включают:
В UNET, SyncLists были синхронизированы сразу же, как только они изменились. Если вы добавляете 10 элементов, это означает отправку 10 отдельных сообщений. Mirror синхронизирует SyncLists вместе с SyncVars. 10 элементов и другие SyncVar объединяются в одно сообщение. Mirror также учитывает интервал синхронизации при синхронизации списков.
В UNET если вам нужен список структур, вы должны использовать
SyncListStruct
, мы изменили его на простоSyncList
В UNET обратный вызов - это делегат. В Mirror мы изменили его на событие, чтобы вы могли добавлять много подписчиков.
В UNET обратный вызов сообщает вам об операции и индексе. В Mirror обратный вызов также получает элемент. Мы внесли это изменение, чтобы можно было определить, какой элемент был удален.
В UNET вы должны создать класс, который наследуется от SyncList. В Mirror вы можете просто использовать SyncList (начиная с версии 20.0.0)
Использование
Добавьте поле SyncList в ваш класс NetworkBehaviour.
SyncList должен быть объявлен как readonly и инициализирован в конструкторе.
Вы также можете определить, когда изменяется SyncList на клиенте или сервере. Это полезно для обновления вашего персонажа при добавлении снаряжения или определения того, когда вам нужно обновить свою базу данных. Подписаться на событие обратного вызова обычно можно в Start
, OnClientStart
, или OnServerStart
.
Обратите внимание, что к моменту вашей подписки список уже будет заполнен, поэтому вы не получите запрос на исходные данные, а только обновления.
Last updated