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

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

Сообщение Nikolaiko 24 фев 2014, 11:27

Доброго времени суток.

Не так давно начал работать с Photon Server. Это в принципе мое первое сетевое приложение поэтому ошибки, возможно, в самой методике а не технологии. В чем суть. Я написал простой сервер, который принимает данные от клиента и хранит их у себя. При создании сцены на клиенте, которая состоит из простого объекта Terrain, так же создается моделька игрока - это просто модель строителя из примера, с прикрепленным к ним скриптами ThirdPersonCamera, ThirdPersonController (только конвертированые в C#).

После создании персонажа отправляется сообщение на сервер о том, что клиент зашел. На сервере он в свою очередь добавляется в список клиентов, при выходе со сцены отправляется сообщение, что клиент вышел, и на сервер он из списка удаляется. В ответ на сообщение клиента, что он зашел сервер ему, помимо занесения в список отправляет ответ сообщение с присвоенным ему Guid.

Потом в Update игрок каждый раз отправляет на сервер свои данные (UserParameters), предварительно сериализовав этот объект.
Синтаксис:
Используется csharp
        var UserData = new UserParameters();

        UserData.x = UserTransform.position.x;
        UserData.y = UserTransform.position.y;
        UserData.z = UserTransform.position.z;      
 
        StringWriter Writer = new StringWriter();
        XmlSerializer MySerializer = new XmlSerializer(typeof(UserParameters));
        MySerializer.Serialize(Writer, UserData);
 

UserTransform (тип transform) - это параметр который передается в функцию для того чтобы она отправила данные серверу, это ее кусочек. Ну и потом этот сериализованный объект добавляется в параметры для отправки : Parameters.Add((byte)ClientParameterCode.USER_PARAMETERS, Writer.ToString()); На севере этот параметр не сериализуется, а хранится в таком же виде как пришел, вместе с Id пользователя.

После того как клиент отправил свои данные, он запрашивает у сервера данные остальных клиентов. Они приходят ему в виде Hastable (ключ - Guid пользователя, а значение - те самые сериализованые параметры, которые каждый пользователь отправляет на сервер). Он их десериализует и если какие-то ID увидел в первый раз, то создает под него модельку игрока (тот же самый строитель, только без скриптов на нем), а если какой уже был, то просто обновляет параметры соответствующей модели.

И так в цикле. Пока клиентов двое все работает хорошо, но как только подключается третий - все сразу ломается. Во время десериализации объекта выпадает ошибка :
XmlException : Xml Declaration cannot appear in this state.

Возможно, я что-то совсем не так делаю. Понять не могу в чем ошибка, слишком частая отправка, данных туда - обратно? Или что еще не так?
Спасибо.
Nikolaiko
UNIт
 
Сообщения: 68
Зарегистрирован: 14 дек 2012, 14:35

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

Сообщение Nikolaiko 24 фев 2014, 14:41

Поковырялся, кое где что-то ускорил, вроде заработало.
Nikolaiko
UNIт
 
Сообщения: 68
Зарегистрирован: 14 дек 2012, 14:35


Вернуться в Photon

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

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