Стандартная сеть Юнити - Форум Игроделов
Пн, 20 Май 2024, 02:17 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Стандартная сеть Юнити
Стандартная сеть Юнити
NapalmRainДата: Ср, 04 Мар 2015, 14:54 | Сообщение # 1
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Доброго всем времени суток!

Не отказавшись от идеи собственной реализации, решил посмотреть на стандартную Сеть юнити, и понять что это за зверь и с чем его есть.

Самый примитивный вариант мульплеера с бегающими друг за другом кубиками и использованием стандартных компонентов создал без особых проблем, но возник целый ряд вопросов, который я решить самостоятельно не смог. Но это вопросы скорее справочные, что бы понять, куда идти дальше.

И так: предположим, что у нас есть объект, который не инстантиейтится во время начала игры, а уже есть по умолчанию как на сервере, так и во всех клиентах, на этом объекте есть некий компонент, данные которого нам нужно синхронизировать. В качестве примера можно использовать Дверь, а скрипт говорит открыть/закрыть, или Ящик с вещами, список которых будет храниться в скрипте, который и нужно синхронизировать.

Для проверки теории наивно создал тестовый скрипт с одной меременной и выводом её значения на экран. Повесил скрипт на кубик, этот же кубик снабдил компонентом нетворк вьюв и ему скормир скрипт. По факту изменение значений переменной происходит только там, где это выло сделано, не важно клиент это или сервер. Синхронизация не происходит.

Вопрос номер раз:
Из справки пришёл к выводу, что для этой цели логично использовать RPC, так ли это? Или подход должен быть иным?

Вопрос номер два: предположим, что наш куб - это вовсе не дверь/сундук/велосипед... А, собственно, персонаж. При создании сервера происходит Инстантиет определённого числа префабов игроков (сразу, не дожидаясь коннекта этих самых игроков). Каким должен быть механизм реализации, если я хочу вновь подключившемуся игроку не создавать нового персонажа и сообщать об этом всем, а отдать ему управление один из уже созданных?

Справку продолжаю штудировать и, возможно найду ответ самостоятельно, но за любую подсказку буду благодарен!
Так же был бы очень признателен за пинок в сторону русскоязычного тутора грамотного. Армия ютуб учителей учит только примитиву, который не особо-то спасает...
Заранее благодарю!

Добавлено (04 Мар 2015, 13:43)
---------------------------------------------
Добавил в скрипт кубика кусочек кода:
Код
void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info) {
    int testInt2 = 0;
    if (stream.isWriting) {
     testInt2 = testInt;
     stream.Serialize(ref testInt2);
    } else {
     stream.Serialize(ref testInt2);
     testInt = testInt2;
    }
   }

Теперь, если меня значение переменной на сервере, она меняется и на клиентах, но если менять её на любом из клиентов, никто кроме него изменений не видит/
В чём проблема понял, Юнити проверяет, имею ли я право отправлять данные, то есть являюсь ли владельцем NetworkView. А так как владелец - сервер, только принимает и не отправляет. Вопрос вот в чём: могу ли я обновлять данные, не являясь владельцем NetworkView? (я знаю, что для этого можно применять RPC, хочу понять именно автоматическую синхронизацию)

Добавлено (04 Мар 2015, 14:54)
---------------------------------------------
И так, небольшое подведение итогов интернет сёрфинга...
Нашёл вот такой вот тутор: https://yadi.sk/i/-z-SjNM3f2r3h
Прошу людей со знанием дела посмотреть на него и сказать своё веское слово.

Если это вся информация, которую необходимо знать для построения грамотного взаимодействия, то я снимаю все вышезаданные вопросы, так как теперь знаю всё, что меня интересует. Если же есть ещё что-то, то буду благодарен за волшебный пинок в нужном направлении.

Сообщение отредактировал NapalmRain - Ср, 04 Мар 2015, 14:09
 
СообщениеДоброго всем времени суток!

Не отказавшись от идеи собственной реализации, решил посмотреть на стандартную Сеть юнити, и понять что это за зверь и с чем его есть.

Самый примитивный вариант мульплеера с бегающими друг за другом кубиками и использованием стандартных компонентов создал без особых проблем, но возник целый ряд вопросов, который я решить самостоятельно не смог. Но это вопросы скорее справочные, что бы понять, куда идти дальше.

И так: предположим, что у нас есть объект, который не инстантиейтится во время начала игры, а уже есть по умолчанию как на сервере, так и во всех клиентах, на этом объекте есть некий компонент, данные которого нам нужно синхронизировать. В качестве примера можно использовать Дверь, а скрипт говорит открыть/закрыть, или Ящик с вещами, список которых будет храниться в скрипте, который и нужно синхронизировать.

Для проверки теории наивно создал тестовый скрипт с одной меременной и выводом её значения на экран. Повесил скрипт на кубик, этот же кубик снабдил компонентом нетворк вьюв и ему скормир скрипт. По факту изменение значений переменной происходит только там, где это выло сделано, не важно клиент это или сервер. Синхронизация не происходит.

Вопрос номер раз:
Из справки пришёл к выводу, что для этой цели логично использовать RPC, так ли это? Или подход должен быть иным?

Вопрос номер два: предположим, что наш куб - это вовсе не дверь/сундук/велосипед... А, собственно, персонаж. При создании сервера происходит Инстантиет определённого числа префабов игроков (сразу, не дожидаясь коннекта этих самых игроков). Каким должен быть механизм реализации, если я хочу вновь подключившемуся игроку не создавать нового персонажа и сообщать об этом всем, а отдать ему управление один из уже созданных?

Справку продолжаю штудировать и, возможно найду ответ самостоятельно, но за любую подсказку буду благодарен!
Так же был бы очень признателен за пинок в сторону русскоязычного тутора грамотного. Армия ютуб учителей учит только примитиву, который не особо-то спасает...
Заранее благодарю!

Добавлено (04 Мар 2015, 13:43)
---------------------------------------------
Добавил в скрипт кубика кусочек кода:
Код
void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info) {
    int testInt2 = 0;
    if (stream.isWriting) {
     testInt2 = testInt;
     stream.Serialize(ref testInt2);
    } else {
     stream.Serialize(ref testInt2);
     testInt = testInt2;
    }
   }

Теперь, если меня значение переменной на сервере, она меняется и на клиентах, но если менять её на любом из клиентов, никто кроме него изменений не видит/
В чём проблема понял, Юнити проверяет, имею ли я право отправлять данные, то есть являюсь ли владельцем NetworkView. А так как владелец - сервер, только принимает и не отправляет. Вопрос вот в чём: могу ли я обновлять данные, не являясь владельцем NetworkView? (я знаю, что для этого можно применять RPC, хочу понять именно автоматическую синхронизацию)

Добавлено (04 Мар 2015, 14:54)
---------------------------------------------
И так, небольшое подведение итогов интернет сёрфинга...
Нашёл вот такой вот тутор: https://yadi.sk/i/-z-SjNM3f2r3h
Прошу людей со знанием дела посмотреть на него и сказать своё веское слово.

Если это вся информация, которую необходимо знать для построения грамотного взаимодействия, то я снимаю все вышезаданные вопросы, так как теперь знаю всё, что меня интересует. Если же есть ещё что-то, то буду благодарен за волшебный пинок в нужном направлении.


Автор - NapalmRain
Дата добавления - 04 Мар 2015 в 14:54
ЛевшаДата: Ср, 04 Мар 2015, 17:52 | Сообщение # 2
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Нетворк вью следит за трансформом, остальное передаем через РПЦ методы.
Движение - разумеется интерполируем.

Цитата NapalmRain ()
При создании сервера происходит Инстантиет определённого числа префабов игроков (сразу, не дожидаясь коннекта этих самых игроков).

А смысл ?

Цитата NapalmRain ()
Каким должен быть механизм реализации, если я хочу вновь подключившемуся игроку не создавать нового персонажа и сообщать об этом всем, а отдать ему управление один из уже созданных?

Так не делается и смысла нет в этом.

M2H - самый хороший тутор и он есть где то в сетке на русском языке, вроде и на unity3d.ru тоже видел.


X.cor.R (Prologue)
 
СообщениеНетворк вью следит за трансформом, остальное передаем через РПЦ методы.
Движение - разумеется интерполируем.

Цитата NapalmRain ()
При создании сервера происходит Инстантиет определённого числа префабов игроков (сразу, не дожидаясь коннекта этих самых игроков).

А смысл ?

Цитата NapalmRain ()
Каким должен быть механизм реализации, если я хочу вновь подключившемуся игроку не создавать нового персонажа и сообщать об этом всем, а отдать ему управление один из уже созданных?

Так не делается и смысла нет в этом.

M2H - самый хороший тутор и он есть где то в сетке на русском языке, вроде и на unity3d.ru тоже видел.

Автор - Левша
Дата добавления - 04 Мар 2015 в 17:52
NapalmRainДата: Чт, 05 Мар 2015, 11:43 | Сообщение # 3
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Цитата Левша ()
M2H - самый хороший тутор и он есть где то в сетке на русском языке, вроде и на unity3d.ru тоже видел.

Собственно, ссылка выше, это он и есть.

Цитата Левша ()
А смысл ?

Цитата Левша ()
Так не делается и смысла нет в этом.

На самом деле смысл в этом есть, правда реализацию я уже придумал слегка иную, но визуально всё будет выглядеть именно так.
И смысл в этом вот какой: одна из особенностей моего проекта в том, что даже когда игрок отключается от сервера, его персонаж продолжает в нём жить. Что бы не было такого, что человек отключился и исчез. С момента отключения его персонаж переводиться в статус некого пассивного НПС, но из мира не исчезает. Вот как-то так.

Добавлено (05 Мар 2015, 11:43)
---------------------------------------------

Цитата Левша ()
Нетворк вью следит за трансформом, остальное передаем через РПЦ методы.
Движение - разумеется интерполируем.

Опять таки, как я вычитал из официальной справки, следить он может и не за трансформом, можно синхронизировать любые данные, какие мне удобно, другой вопрос, что нужно это по большей части только для трансформа. Но в целом я понял практически всё, что нужно.
И первая же мысль: зря я сразу отказался от использования стандартной сети, ибо в ней очень много предусмотрено, чего я сам бы не предусмотрел точно...
Но вот только на форумах ругаются на производительность при её использовании.
Есть ли у кого опыт использования её при числе игроков, скажем так, больше одного-двух десятков (ММО)?
 
Сообщение
Цитата Левша ()
M2H - самый хороший тутор и он есть где то в сетке на русском языке, вроде и на unity3d.ru тоже видел.

Собственно, ссылка выше, это он и есть.

Цитата Левша ()
А смысл ?

Цитата Левша ()
Так не делается и смысла нет в этом.

На самом деле смысл в этом есть, правда реализацию я уже придумал слегка иную, но визуально всё будет выглядеть именно так.
И смысл в этом вот какой: одна из особенностей моего проекта в том, что даже когда игрок отключается от сервера, его персонаж продолжает в нём жить. Что бы не было такого, что человек отключился и исчез. С момента отключения его персонаж переводиться в статус некого пассивного НПС, но из мира не исчезает. Вот как-то так.

Добавлено (05 Мар 2015, 11:43)
---------------------------------------------

Цитата Левша ()
Нетворк вью следит за трансформом, остальное передаем через РПЦ методы.
Движение - разумеется интерполируем.

Опять таки, как я вычитал из официальной справки, следить он может и не за трансформом, можно синхронизировать любые данные, какие мне удобно, другой вопрос, что нужно это по большей части только для трансформа. Но в целом я понял практически всё, что нужно.
И первая же мысль: зря я сразу отказался от использования стандартной сети, ибо в ней очень много предусмотрено, чего я сам бы не предусмотрел точно...
Но вот только на форумах ругаются на производительность при её использовании.
Есть ли у кого опыт использования её при числе игроков, скажем так, больше одного-двух десятков (ММО)?

Автор - NapalmRain
Дата добавления - 05 Мар 2015 в 11:43
ЛевшаДата: Чт, 05 Мар 2015, 18:24 | Сообщение # 4
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Цитата NapalmRain ()
на форумах ругаются на производительность

Это бред, все в твоих руках (в их ровности).

PS. С помощью Unity MasterServer можешь развернуть сервак прямо на своем компе и без *белого IP. smile


X.cor.R (Prologue)
 
Сообщение
Цитата NapalmRain ()
на форумах ругаются на производительность

Это бред, все в твоих руках (в их ровности).

PS. С помощью Unity MasterServer можешь развернуть сервак прямо на своем компе и без *белого IP. smile

Автор - Левша
Дата добавления - 05 Мар 2015 в 18:24
NapalmRainДата: Ср, 11 Мар 2015, 15:55 | Сообщение # 5
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Левша, Ну что ж, спасибо за ответы! Камень с души упал))
Цитата Левша ()
С помощью Unity MasterServer можешь развернуть сервак прямо на своем компе и без *белого IP.

Да, я это тоже уже вычитал, и даже нашёл уже настроенный экземпляр, которым можно только запустить и радоваться) Но это пока не нужно, тем более у меня всё равно есть внешний ip статический

Добавлено (11 Мар 2015, 15:55)
---------------------------------------------
Очень хотелось бы понять способ реализации по ещё двум вопросам:
Предположим у меня в игре несколько локаций. Организовывать их параллельную работу я представляю себе следующим образом:
- Компилировать несколько экземпляров сервера для каждой локации, регистрировать их в мастер сервере и через него подключаться к нужному экземпляру, находясь в нужной сцене на клиенте.
Вопрос: есть ли иной способ реализации данного вопроса?

И вопрос номер два: Предположим, что в некоторых локациях синхронизации должна происходить только внутри некоторых групп. А не между всеми всеми игроками.
Опять таки единственные вариант, который пришёл в голову - это запускать несколько экземпляров серверов одной локации и опять таки регистрировать их на мастер-сервере а членов одной группы подключать к одному экземпляру.

Но если есть и иные варианты, так же буду благодарен!


Сообщение отредактировал NapalmRain - Ср, 11 Мар 2015, 15:56
 
СообщениеЛевша, Ну что ж, спасибо за ответы! Камень с души упал))
Цитата Левша ()
С помощью Unity MasterServer можешь развернуть сервак прямо на своем компе и без *белого IP.

Да, я это тоже уже вычитал, и даже нашёл уже настроенный экземпляр, которым можно только запустить и радоваться) Но это пока не нужно, тем более у меня всё равно есть внешний ip статический

Добавлено (11 Мар 2015, 15:55)
---------------------------------------------
Очень хотелось бы понять способ реализации по ещё двум вопросам:
Предположим у меня в игре несколько локаций. Организовывать их параллельную работу я представляю себе следующим образом:
- Компилировать несколько экземпляров сервера для каждой локации, регистрировать их в мастер сервере и через него подключаться к нужному экземпляру, находясь в нужной сцене на клиенте.
Вопрос: есть ли иной способ реализации данного вопроса?

И вопрос номер два: Предположим, что в некоторых локациях синхронизации должна происходить только внутри некоторых групп. А не между всеми всеми игроками.
Опять таки единственные вариант, который пришёл в голову - это запускать несколько экземпляров серверов одной локации и опять таки регистрировать их на мастер-сервере а членов одной группы подключать к одному экземпляру.

Но если есть и иные варианты, так же буду благодарен!

Автор - NapalmRain
Дата добавления - 11 Мар 2015 в 15:55
ЛевшаДата: Ср, 11 Мар 2015, 18:20 | Сообщение # 6
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Был один чел, он утверждал что в одном серваке он мог перемещатся по сценам.
Но как я без понятия.
Я бы сделал так как ты описал.


X.cor.R (Prologue)
 
СообщениеБыл один чел, он утверждал что в одном серваке он мог перемещатся по сценам.
Но как я без понятия.
Я бы сделал так как ты описал.

Автор - Левша
Дата добавления - 11 Мар 2015 в 18:20
NapalmRainДата: Чт, 12 Мар 2015, 07:59 | Сообщение # 7
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Левша, понял, спасибо!
 
СообщениеЛевша, понял, спасибо!

Автор - NapalmRain
Дата добавления - 12 Мар 2015 в 07:59
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Стандартная сеть Юнити
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024