Синхронизация в мультиплеере

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Re: Синхронизация в мультиплеере

Сообщение AMD 29 июл 2013, 21:17

У Вас объект чем управляется?

Давайте посмотрим скрипты все, что у Вас есть вдруг какой "понравиться".

И Вы делаете это все на 1 сцене?
Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему.
AMD
UNITрон
 
Сообщения: 349
Зарегистрирован: 16 июн 2012, 14:33
Откуда: Москва

Re: Синхронизация в мультиплеере

Сообщение Woland 29 июл 2013, 21:41

Сам сервер отдельная сцена, все остальное это одна сцена. Управляем стандартным ферст персон контроллером, при создании которого проверяется, является он нашим или нет. Если нет, на нем отключаются скрипты управления и на нашем клиенте удаляется лишняя камера. Скрипт на синхронизацию взят отсюда http://www.unity3d.ru/distribution/view ... 27#p126333 (синхронизация для обычного объекта). Больше нет вообще ничего

В сцене сервера есть только мейн камера, на ней скрипт
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Server : MonoBehaviour {

        // Use this for initialization
        void Start () {
        bool useNat = !Network.HavePublicAddress();
            Network.InitializeServer(10, 5000, useNat);
        }
       
        // Update is called once per frame
        void OnGUI(){
        GUI.Label(new Rect(300,300,100,100),Network.connections.Length.ToString());
        }
}
 





P.S какая то хитрожопая магия, если сервер - это та же сцена, то почему то все работает. Если сервер - другая сцена, то нихрена
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Синхронизация в мультиплеере

Сообщение AMD 30 июл 2013, 13:00

У Вас происходит конект на одной сцене, а игра на другой?

Сталкивался с этим, что бы решить проблему:

Network.isMessageQueueRunning = false;

Это пишем в фунции OnConnectedToServer(), (данный код располагается в первой сцене)

Далее в скрипте, который в новой сцене (загружаемой), пишем Network.isMessageQueueRunning = true; в Awake(), т.о. можно избавится от надписи не удалять при загрузке...
Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему.
AMD
UNITрон
 
Сообщения: 349
Зарегистрирован: 16 июн 2012, 14:33
Откуда: Москва

Re: Синхронизация в мультиплеере

Сообщение Woland 30 июл 2013, 13:55

нет, коннект и сама игра происходят в одной сцене. Сам же сервер создается на другой сцене, больше там ничего не происходит. То есть у меня есть 2 екзешника - сервер и игра. На сервере инициализируется сервер в отдельной сцене и все. В игре мы коннектимся к серверу, и если коннект удачный, на этой же сцене спауним игрока. Синхронизации нет. НО если мы будем делать сервер на этой же сцене, то синхронизация есть.
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Синхронизация в мультиплеере

Сообщение AMD 30 июл 2013, 14:01

Т.е. у Вас клиент и сервер различны? Вы по принципу авторитарного сервера делаете?
Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему.
AMD
UNITрон
 
Сообщения: 349
Зарегистрирован: 16 июн 2012, 14:33
Откуда: Москва

Re: Синхронизация в мультиплеере

Сообщение Woland 30 июл 2013, 14:07

Честно - понятия не имею, какой у меня тип, так как начал изучать мультиплеер только вчера вечером) Но сервер и клиент - это полностью разные екзешники и абсолютно разные сцены.
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Синхронизация в мультиплеере

Сообщение AMD 30 июл 2013, 14:23

Сделайте прострой мультик на 1 сцене по уроку, что кидал Вам выше.

Я честно говоря, не могу понять как у Вас вообще что-либо работает :D
Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему.
AMD
UNITрон
 
Сообщения: 349
Зарегистрирован: 16 июн 2012, 14:33
Откуда: Москва

Re: Синхронизация в мультиплеере

Сообщение Woland 30 июл 2013, 14:41

Ща объясню мего подробно!)
Есть сцена с названием сервер, там висит ГО на котором висит скрипт Server
Синтаксис:
Используется csharp
bool useNat = !Network.HavePublicAddress();
Network.InitializeServer(10, 5000, useNat);

Это все в старте, то есть при запуске у нас инициализируется сервер. Больше там нет вообще ничего. Это один екзешник

Дальше у нас есть сцена Game, есть Го на котором висит скрипт Spawn (это второй екзешник)
Синтаксис:
Используется csharp
void Start()
{
Network.Connect("***",5000);
}
void OnConnectedToServer() {
Network.Instantiate(g,new Vector3(10,10,10),Quaternion.identity,1);
}


Есть еще скрипт на проверка, наш это клиент или нет, но он не важен. Все, больше ничего нет. То есть у нас есть 2 екзешника с разными сценами и разными скриптами. И в этом случае синхронизации нету, другие игроки просто висят в точке спауна. Но если мы скрипт, инициализирующий сервер, перекинем в сцену Game и сделаем 2 екзешника с одной сценой (один со скриптом Server, другой со скриптом Spawn), то все работает. Меня это напрягает(
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Синхронизация в мультиплеере

Сообщение AMD 30 июл 2013, 15:15

Woland писал(а):Меня это напрягает(


Потому как, и из того что я по урокам видел и стандартной сети и фотона, так это то, что клиент и сервер это один и тот же "экзешник".

А Вы пытаетесь пилить некий сервер, который должен не зная, ни о чем, выполнять какие-то действия, тут Вам нужно копать в сторону чистого TCP, где сервер будет выступать в роли лишь перенаправления данных.

В уроках и примерах, сервер - такая же игра, которая "знает", что она делает и что делать если что-то происходит. Очередной раз настоятельно рекомендую сделать по урокам, что бы ознакомиться.
Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему.
AMD
UNITрон
 
Сообщения: 349
Зарегистрирован: 16 июн 2012, 14:33
Откуда: Москва

Re: Синхронизация в мультиплеере

Сообщение Woland 30 июл 2013, 15:19

Короче, как я понял,встроенные средства юнити поддерживают игру и сервак только на одной сцене(
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Синхронизация в мультиплеере

Сообщение AMD 30 июл 2013, 15:28

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

И не только
Woland писал(а):встроенные средства юнити

Тоже самое касается и фотона (известное сетевое решение для юни)
Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему.
AMD
UNITрон
 
Сообщения: 349
Зарегистрирован: 16 июн 2012, 14:33
Откуда: Москва

Re: Синхронизация в мультиплеере

Сообщение Woland 30 июл 2013, 15:44

а как сделать отдельный сервак?)
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Пред.

Вернуться в Почемучка

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

Сейчас этот форум просматривают: Google [Bot] и гости: 20