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

Сеть в Unity3D

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

Сообщение DeRibura 21 апр 2017, 21:18

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

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

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

Также есть вопрос - как вообще реагирует приложение на такие вещи: например у объекта прописано постоянное движение вправо, прямо в скрипте, что будет при попытке синхронизировать этот объект с его остановленной копией на сервере? Или в данном случае нужно синхронизировать скорость+положение, а не только положение?
DeRibura
UNец
 
Сообщения: 18
Зарегистрирован: 21 апр 2017, 20:29

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

Сообщение maksimov 24 май 2017, 13:21

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

Что значит "остановленная копия"?
Вы меняете некую характеристику (например положение в пространстве) на одном клиенте. А синхронизация - это процесс приведения данной характеристики на всех остальных клиентах к тому значению, которое она имеет на том, на котором вы её поменяли.
Красота — не прихоть полубога, а хищный глазомер простого столяра.
Аватара пользователя
maksimov
UNITрон
 
Сообщения: 154
Зарегистрирован: 19 фев 2013, 11:48
  • Сайт


Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2