Страница 1 из 1

Синхронизация объектов

СообщениеДобавлено: 21 апр 2017, 21:18
DeRibura
Добрый день (извините за дубликат темы из "почемучки").
Пишу сетевую игру стандартными функциями юнити, где один из клиентов является сервером. Столкнулся с двумя проблемами:
1) Запускаю два приложения (для клиента и сервера), а объекты движутся только в активном окне - поэтому я не могу отследить их синхронность.
2) Пол дня разбирался как синхронизировать положение объекта на клиенте и на сервере - не смог, т.к. находил или старые темы с использованием NetworkView или что-то слишком громоздкое.

Добился только того, что при подключении клиента создается объект через Network.Instantiate() - а потом объекты в клиентах движутся независимо друг от друга.

Буду очень благодарен за минималистичный, без всевозможных бесполезных проверок, пример (сцена с 1 объектом например, который движется, а при клике на него останавливается в обоих приложениях). Я так полагаю, что использование RPC тут не понадобится.

Также есть вопрос - как вообще реагирует приложение на такие вещи: например у объекта прописано постоянное движение вправо, прямо в скрипте, что будет при попытке синхронизировать этот объект с его остановленной копией на сервере? Или в данном случае нужно синхронизировать скорость+положение, а не только положение?

Re: Синхронизация объектов

СообщениеДобавлено: 24 май 2017, 13:21
maksimov
DeRibura писал(а):объекты движутся только в активном окне


Синтаксис:
Используется csharp
Application.runInBackground = true;

или
Edit -> Project Settings -> Player -> "Run In Background" ставим галочку


DeRibura писал(а):Пол дня разбирался как синхронизировать положение объекта на клиенте и на сервере - не смог, т.к. находил или старые темы с использованием NetworkView или что-то слишком громоздкое.


Набрал в поисковике: "unity3d net sync 2017"
(юнити, сеть, синхронизация, последнее)

Получил исчерпывающий ответ:
https://docs.unity3d.com/2017.1/Documen ... eSync.html
https://docs.unity3d.com/2017.1/Documen ... viour.html

На всё про всё ушло что-то около 4 секунд (так долго, потому что делал всё очень аккуратно, вдумчиво...). Куда девать оставшееся от полудня время - не знаю. =(


DeRibura писал(а):Буду очень благодарен за минималистичный, без всевозможных бесполезных проверок, пример (сцена с 1 объектом например, который движется, а при клике на него останавливается в обоих приложениях).


Будьте. =)
Синтаксис:
Используется csharp
transform.transformSyncMode = NetworkTransform.TransformSyncMode.SyncTransform;

Абсолютно минималистично и совершенно без каких-либо "бесполезных проверок".


DeRibura писал(а):Также есть вопрос - как вообще реагирует приложение на такие вещи: например у объекта прописано постоянное движение вправо, прямо в скрипте, что будет при попытке синхронизировать этот объект с его остановленной копией на сервере?

Что значит "остановленная копия"?
Вы меняете некую характеристику (например положение в пространстве) на одном клиенте. А синхронизация - это процесс приведения данной характеристики на всех остальных клиентах к тому значению, которое она имеет на том, на котором вы её поменяли.