Не отказавшись от идеи собственной реализации, решил посмотреть на стандартную Сеть юнити, и понять что это за зверь и с чем его есть.
Самый примитивный вариант мульплеера с бегающими друг за другом кубиками и использованием стандартных компонентов создал без особых проблем, но возник целый ряд вопросов, который я решить самостоятельно не смог. Но это вопросы скорее справочные, что бы понять, куда идти дальше.
И так: предположим, что у нас есть объект, который не инстантиейтится во время начала игры, а уже есть по умолчанию как на сервере, так и во всех клиентах, на этом объекте есть некий компонент, данные которого нам нужно синхронизировать. В качестве примера можно использовать Дверь, а скрипт говорит открыть/закрыть, или Ящик с вещами, список которых будет храниться в скрипте, который и нужно синхронизировать.
Для проверки теории наивно создал тестовый скрипт с одной меременной и выводом её значения на экран. Повесил скрипт на кубик, этот же кубик снабдил компонентом нетворк вьюв и ему скормир скрипт. По факту изменение значений переменной происходит только там, где это выло сделано, не важно клиент это или сервер. Синхронизация не происходит.
Вопрос номер раз: Из справки пришёл к выводу, что для этой цели логично использовать RPC, так ли это? Или подход должен быть иным?
Вопрос номер два: предположим, что наш куб - это вовсе не дверь/сундук/велосипед... А, собственно, персонаж. При создании сервера происходит Инстантиет определённого числа префабов игроков (сразу, не дожидаясь коннекта этих самых игроков). Каким должен быть механизм реализации, если я хочу вновь подключившемуся игроку не создавать нового персонажа и сообщать об этом всем, а отдать ему управление один из уже созданных?
Справку продолжаю штудировать и, возможно найду ответ самостоятельно, но за любую подсказку буду благодарен! Так же был бы очень признателен за пинок в сторону русскоязычного тутора грамотного. Армия ютуб учителей учит только примитиву, который не особо-то спасает... Заранее благодарю!
Добавлено (04 Мар 2015, 13:43) --------------------------------------------- Добавил в скрипт кубика кусочек кода:
Теперь, если меня значение переменной на сервере, она меняется и на клиентах, но если менять её на любом из клиентов, никто кроме него изменений не видит/ В чём проблема понял, Юнити проверяет, имею ли я право отправлять данные, то есть являюсь ли владельцем NetworkView. А так как владелец - сервер, только принимает и не отправляет. Вопрос вот в чём: могу ли я обновлять данные, не являясь владельцем NetworkView? (я знаю, что для этого можно применять RPC, хочу понять именно автоматическую синхронизацию)
Добавлено (04 Мар 2015, 14:54) --------------------------------------------- И так, небольшое подведение итогов интернет сёрфинга... Нашёл вот такой вот тутор: https://yadi.sk/i/-z-SjNM3f2r3h Прошу людей со знанием дела посмотреть на него и сказать своё веское слово.
Если это вся информация, которую необходимо знать для построения грамотного взаимодействия, то я снимаю все вышезаданные вопросы, так как теперь знаю всё, что меня интересует. Если же есть ещё что-то, то буду благодарен за волшебный пинок в нужном направлении.
Сообщение отредактировал NapalmRain - Ср, 04 Мар 2015, 14:09
Нетворк вью следит за трансформом, остальное передаем через РПЦ методы. Движение - разумеется интерполируем.
ЦитатаNapalmRain ()
При создании сервера происходит Инстантиет определённого числа префабов игроков (сразу, не дожидаясь коннекта этих самых игроков).
А смысл ?
ЦитатаNapalmRain ()
Каким должен быть механизм реализации, если я хочу вновь подключившемуся игроку не создавать нового персонажа и сообщать об этом всем, а отдать ему управление один из уже созданных?
Так не делается и смысла нет в этом.
M2H - самый хороший тутор и он есть где то в сетке на русском языке, вроде и на unity3d.ru тоже видел. X.cor.R (Prologue)
M2H - самый хороший тутор и он есть где то в сетке на русском языке, вроде и на unity3d.ru тоже видел.
Собственно, ссылка выше, это он и есть.
ЦитатаЛевша ()
А смысл ?
ЦитатаЛевша ()
Так не делается и смысла нет в этом.
На самом деле смысл в этом есть, правда реализацию я уже придумал слегка иную, но визуально всё будет выглядеть именно так. И смысл в этом вот какой: одна из особенностей моего проекта в том, что даже когда игрок отключается от сервера, его персонаж продолжает в нём жить. Что бы не было такого, что человек отключился и исчез. С момента отключения его персонаж переводиться в статус некого пассивного НПС, но из мира не исчезает. Вот как-то так.
Добавлено (05 Мар 2015, 11:43) ---------------------------------------------
ЦитатаЛевша ()
Нетворк вью следит за трансформом, остальное передаем через РПЦ методы. Движение - разумеется интерполируем.
Опять таки, как я вычитал из официальной справки, следить он может и не за трансформом, можно синхронизировать любые данные, какие мне удобно, другой вопрос, что нужно это по большей части только для трансформа. Но в целом я понял практически всё, что нужно. И первая же мысль: зря я сразу отказался от использования стандартной сети, ибо в ней очень много предусмотрено, чего я сам бы не предусмотрел точно... Но вот только на форумах ругаются на производительность при её использовании. Есть ли у кого опыт использования её при числе игроков, скажем так, больше одного-двух десятков (ММО)?
Левша, Ну что ж, спасибо за ответы! Камень с души упал))
ЦитатаЛевша ()
С помощью Unity MasterServer можешь развернуть сервак прямо на своем компе и без *белого IP.
Да, я это тоже уже вычитал, и даже нашёл уже настроенный экземпляр, которым можно только запустить и радоваться) Но это пока не нужно, тем более у меня всё равно есть внешний ip статический
Добавлено (11 Мар 2015, 15:55) --------------------------------------------- Очень хотелось бы понять способ реализации по ещё двум вопросам: Предположим у меня в игре несколько локаций. Организовывать их параллельную работу я представляю себе следующим образом: - Компилировать несколько экземпляров сервера для каждой локации, регистрировать их в мастер сервере и через него подключаться к нужному экземпляру, находясь в нужной сцене на клиенте. Вопрос: есть ли иной способ реализации данного вопроса?
И вопрос номер два: Предположим, что в некоторых локациях синхронизации должна происходить только внутри некоторых групп. А не между всеми всеми игроками. Опять таки единственные вариант, который пришёл в голову - это запускать несколько экземпляров серверов одной локации и опять таки регистрировать их на мастер-сервере а членов одной группы подключать к одному экземпляру.
Но если есть и иные варианты, так же буду благодарен!
Сообщение отредактировал NapalmRain - Ср, 11 Мар 2015, 15:56