|
|
|
Канал Игры Мечты: «Unity -- учим вместе» |
|
|
Guest 2075 EGP
Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Jurec : |
а, я думал они все постоянно в движении
|
Нет. Есть пара розеток. Взяли провод за одну вилку, дотащили, подключили, взяли за другую, дотащили, подключили. Всё. Пока его никто не трогает (в т.ч. другой провод, падающий предмет и т.д.) - он лежит. Просто он должен лежать так, как положили, особенно после загрузки. Если, конечно, плясать не будет. А после загрузки скорее всего будет - физика после инициализации любит какие-нибудь силы ни с того, ни с сего генерировать.
Olorin : |
Чем BinarySerializer плох?..
|
Ничем. Не пробовал. Бинарник текстовым редактором не посмотришь и не поправишь. Не то, чтобы это было нужно, просто удобно.
Но ок, почему бы и нет? Спасибо.
Olorin : |
Выхлоп должен быть компактнее xml-я, но он пишет полные имена типов, ибо универсальный. При желании, на них можно бы сэкономить.
|
После сжатия ИМХО примерно один фиг. Пошерстил лицензию - gzip вроде как можно спокойно в коммерческих продуктах пользовать.
_________________ Трещит земля как пустой орех
Как щепка трещит броня |
|
|
Olorin 70 EGP
Рейтинг канала: 1(6) Репутация: 12 Сообщения: 97 Откуда: Хьёрвард Зарегистрирован: 27.02.2006 |
|
Guest : |
Olorin : |
Выхлоп должен быть компактнее xml-я, но он пишет полные имена типов, ибо универсальный. При желании, на них можно бы сэкономить.
|
После сжатия ИМХО примерно один фиг. Пошерстил лицензию - gzip вроде как можно спокойно в коммерческих продуктах пользовать.
|
System.IO.Compression.GZipStream
Но не по сети же.. ))
1. Если изменения точечные - мб именно инфу о изменениях юзера передавать.. с периодической глобальной синхронизацией.
2. Из физики делать выжимку изменений. И эту выжимку передавать, применяя прямо к сцене у остальных игроков.
3. Если оно централизованное, и изменений на сцене в единицу времени мало, то вообще лафа: пусть за всю анимацию отвечает сервер, а остальные ему только командуют, как менять сцену извне.
_________________ Мы на многое не отваживаемся не потому что оно трудно; оно трудно именно потому, что мы на него не отваживаемся.
Сенека Старший |
|
|
Guest 2075 EGP
Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Olorin : |
Но не по сети же.. ))
1. Если изменения точечные - мб именно инфу о изменениях юзера передавать.. с периодической глобальной синхронизацией.
2. Из физики делать выжимку изменений. И эту выжимку передавать, применяя прямо к сцене у остальных игроков.
3. Если оно централизованное, и изменений на сцене в единицу времени мало, то вообще лафа: пусть за всю анимацию отвечает сервер, а остальные ему только командуют, как менять сцену извне.
|
Да, по сети - согласен. Не в реалтайме же жать... Хотя сейчас и не такое можно
1-3. Централизованное.
Например, сценарий: игрок1 работает, игрок2 страдает фигнёй
Игрок2 заказал солярку, кабели, тройник и, скажем, генератор кислорода. Этот запрос ушёл на сервер, генерация префабов объектов со всеми их коллайдерами, апдейт клиентам - создание префабов объектов у них (в дальнейшем эти префабы будут получать инфу о своём состоянии с сервера), апдейты движения (десантирования с орбиты и разворачивания. Да-да, всё сложно ) - ну, допустим, там всего лишь координаты, вроде ничего страшного, но в реалтайме. Опять же - практически односторонняя передача, т.к. симуляция вся на сервере.
Игрок1 хватает кабель и тащщыт его к солярке. И вот тут наступают грабли. Во-первых, инициализатором изменения выступает клиент игрока1. Причём контрольный поинт префаба за него закреплён не жёстко, чтобы вырываться из руки, если не хватит длины. Но для простоты работы мы передаём на сервер только положение и вращение персонажа игрока. Во-вторых - это пересчёт всего провода на основе данных смещения и вращения руки персонажа игрока и взаимодействия с физикой всего остального мира (в том числе с тушкой персонажа второго игрока). И вот тут нас поджидает лаг, который физика ой как не любит...
Насчёт количества изменений в единицу времени - вот эти вот пляски физики во время таскания и задевания за предметы обновляются считай каждый апдейт физики, то бишь довольно часто (где-то 15-20 раз в секунду надо, иначе большой шаг = большая накопленная ошибка = физдипец с летающими макаронами). Перемещения персонажа вообще по-хорошему каждый апдейт надо. Остальное обновляется намного реже.
Я не знаю, насколько адекватно будет реагировать клиент, если он будет жить на предсказаниях, периодически синхронизируемых с сервером. Как бы оно не стало спазматически-судорожным.
С другой стороны, если физику имитировать на клиентах - она всенепременно будет расходиться у всех клиентов на фиг.
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (14:28 18-11-2013), всего редактировалось 1 раз |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
Olorin : |
Чем BinarySerializer плох?
|
Это ужасная штука, она для чего-то в стрим засовывает все имена снятые рефлекшном, гораздо дешевле иметь на обоих концах сети заранее известный набор пакетов и не передавать кажный раз инфу о структуре данных, тока сами данные
_________________ This is what you get ...
(c) Radiohead |
|
|
Olorin 70 EGP
Рейтинг канала: 1(6) Репутация: 12 Сообщения: 97 Откуда: Хьёрвард Зарегистрирован: 27.02.2006 |
|
Guest : |
Я не знаю, насколько адекватно будет реагировать клиент, если он будет жить на предсказаниях, периодически синхронизируемых с сервером. Как бы оно не стало спазматически-судорожным.
С другой стороны, если физику имитировать на клиентах - она всенепременно будет расходиться у всех клиентов на фиг.
|
Из полагающихся на мелкие пакеты - Quake, CS, Freelancer.. играбельны.))
Из более тяжелого, стратегии какие-нибудь, обычно используют комбинацию - в реалтайме передается дельта, плюс периодически полная синхронизация.
Пробовать надо.
Sh.Tac. : |
Olorin : |
Чем BinarySerializer плох?
|
Это ужасная штука, она для чего-то в стрим засовывает все имена снятые рефлекшном, гораздо дешевле иметь на обоих концах сети заранее известный набор пакетов и не передавать кажный раз инфу о структуре данных, тока сами данные
|
Olorin : |
.., но он пишет полные имена типов, ибо универсальный. При желании, на них можно бы сэкономить.
|
Инфу о структуре он не передает. Он передаёт поток внутренних перекрёстных ссылок экземпляров, в который разложен граф объектов. Когда граф восстанавливается, информация о структуре берётся из типов, которые ресолвятся по этим именам из потока. Если быть более точным, она даже не нужна, он воссоздает экземпляр того типа, на который отматчилось имя из потока, после чего друг за другом читает из потока значения для полей этого экземпляра и пытается назначить в подряд идущие поля. Если полей больше, чем значений, - значит локально имеем тип более поздней версии, чем сериализованный. Если меньше или не совпали тип значения и поля - ексцепшон. Примерно так. Как удалённые поля обрабатываются - не помню.
На самом деле, если надо, могу поискать свой самописный универсальный сериализатор, который как раз пытается на именах экономить, вводя кастомный способ идентификации типа экземпляра. Реально компактнее выходит. На версионирование я скорее всего там забил, но если не поддерживать общение различающихся версий софтины, то, в качестве сетевого протокола, это не важно.
Эффективнее будет только вручную для каждого типа написать сериализацию и десериализацию. Но на этапе разработке имхо на это лучше забить. Потом, когда протокол в терминах типов устоится.
_________________ Мы на многое не отваживаемся не потому что оно трудно; оно трудно именно потому, что мы на него не отваживаемся.
Сенека Старший |
|
|
Jurec 348 EGP
Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
Olorin : |
стратегии какие-нибудь, обычно используют комбинацию - в реалтайме передается дельта, плюс периодически полная синхронизация.
|
Просто дельта, стратегии полностью ничего не синхронизируют - это очень дорого
_________________ MOV topka, C++ |
|
|
Olorin 70 EGP
Рейтинг канала: 1(6) Репутация: 12 Сообщения: 97 Откуда: Хьёрвард Зарегистрирован: 27.02.2006 |
|
Jurec : |
Olorin : |
стратегии какие-нибудь, обычно используют комбинацию - в реалтайме передается дельта, плюс периодически полная синхронизация.
|
Просто дельта, стратегии полностью ничего не синхронизируют - это очень дорого
|
Естественно, не тотально глобальное состояние. Но, к примеру, полностью фрагмент карты со всем, что в него попало, - да.
Если дельта передается по протоколу без гарантии факта и/или порядка доставки пакетов - без синхронизации никак.
Хотя еслиб Dune2000 умела синхронизировать глобальное состояние - это пошло бы на пользу. Обрывы сетевой игры с сообщением "Потеря синхронизации" весьма и весьма доставляли. В её случае, движок изначально на мультиплеер рассчитан небыл, его докручивали сбоку, от того видимо так и получилось.
_________________ Мы на многое не отваживаемся не потому что оно трудно; оно трудно именно потому, что мы на него не отваживаемся.
Сенека Старший
Последний раз редактировалось: Olorin (15:37 18-11-2013), всего редактировалось 2 раз(а) |
|
|
Jurec 348 EGP
Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
Olorin : |
Если дельта передается по протоколу без гарантии факта и/или порядка доставки пакетов - без синхронизации никак.
|
Нее, только TCP.
Глобальное состояние в стратегиях не передает никто. Именно поэтому во всех RTS надо ждать пока все присоединяться, нельзя зайти в середине игры. И сплошной ад у разрабов на синхронизацию.
_________________ MOV topka, C++ |
|
|
Olorin 70 EGP
Рейтинг канала: 1(6) Репутация: 12 Сообщения: 97 Откуда: Хьёрвард Зарегистрирован: 27.02.2006 |
|
Jurec : |
Olorin : |
Если дельта передается по протоколу без гарантии факта и/или порядка доставки пакетов - без синхронизации никак.
|
Нее, только TCP.
Глобальное состояние в стратегиях не передает никто. Именно поэтому во всех RTS надо ждать пока все присоединяться, нельзя зайти в середине игры. И сплошной ад у разрабов на синхронизацию.
|
Это сейчас сетки стали достаточно шустрые, чтоб по TCP можно было стратежить в реалтайме. В бородатые IPX юзали вовсю.)
Некоторые из тех игр можно попробовать с инкапсуляцией в UDP (см. ipxwrapper).
А так да.)
_________________ Мы на многое не отваживаемся не потому что оно трудно; оно трудно именно потому, что мы на него не отваживаемся.
Сенека Старший
Последний раз редактировалось: Olorin (23:49 18-11-2013), всего редактировалось 1 раз |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
вроде бы не самый плохой блог про юнити
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
Эм... Где почитать.. В Вебе платформе можно сокетами пользоваться? (TCP и UDP)
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
можно, если сетевая часть на шарпе, как напрямую в скрипты совать, так и в dll
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
Sh.Tac. : |
можно, если сетевая часть на шарпе, как напрямую в скрипты совать, так и в dll
|
Ок. А где почитать про ограничения? Точно знаю что unsafe запрещен. Я это ограничение снимал для своего бота для BSGO, а еще что?..
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
unsafe в скриптах низзя, в dll пожалста
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
Sh.Tac. : |
unsafe в скриптах низзя, в dll пожалста
|
А dll можно в веб?..
добавлено спустя 17 секунд:
Вернее можно. Это понятно, но как доставить-то?..
_________________ WARNING: By reading this post you accept that this post is genius.
Последний раз редактировалось: Варсик (00:55 20-12-2013), всего редактировалось 1 раз |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
тама папка Plugins должна быть вроде, оттуда цепляется
добавлено спустя 25 минут:
не, кажись наврал, для веб плейера можно тупо в Assets бросить
_________________ This is what you get ...
(c) Radiohead
Последний раз редактировалось: Sh.Tac. (01:25 20-12-2013), всего редактировалось 1 раз |
|
|
Gladius 52 EGP
Рейтинг канала: 1(9) Репутация: 0 Сообщения: 124 Откуда: Санкт-Петербург Зарегистрирован: 18.12.2007 |
|
Уважаемые коллеги, пробовал ли кто-нибудь вот эту штуку:
http://www.youtube.com/watch?v=2QnH3-9boUg
И если кто-то пробовал, то каковы впечатления?
_________________ Спасибо за внимание. |
|
|
sedoy 333 EGP
Рейтинг канала: 1(2) Репутация: 65 Сообщения: 1057 Откуда: красноярск Зарегистрирован: 25.07.2002 |
|
кто пробовал бету 4.6 ?
там какой-то демонский UI конструктор прикручен
http://www.youtube.com/watch?v=EOX6itCuKOc
Последний раз редактировалось: sedoy (19:00 24-10-2014), всего редактировалось 1 раз |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
хорошая презентация, я кажись понял чего это за "ромашка" в UE такая же
_________________ This is what you get ...
(c) Radiohead |
|
|
Dalarsar 65 EGP
Рейтинг канала: 1(3) Репутация: 5 Сообщения: 93 Откуда: Челябинск Зарегистрирован: 25.09.2011 |
|
Можно задать сюда вопрос по C#?
У меня массив под строкой "Enemy" переполняется, хотя массив "Player" точно такой-же, и работает нормально.
Cкрытый текст (кликните здесь для просмотра)
Код: |
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour {
private Vector3 newPosition;
public Enemy e;
public Player p;
void Update ()
{
if (Input.GetMouseButtonDown(0)) //если левый клик мыши,
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray, out hit, 100))
{
newPosition = new Vector3(Random.Range(-8f, 8f), Random.Range(-5f, 5f));//обновляем позицию
hit.transform.position = newPosition;
if(hit.transform.tag == "Player")//если щелкам по обьекту с тэгом плэер
{
ChangeColor("Player");
}
if(hit.transform.tag == "Enemy")
{
ChangeColor("Enemy");
}
}
}
}
void ChangeColor(string objString)
{
if(objString == "Enemy")//почему-то массив здесь переполняется
{
int newCol = Random.Range(0, e.GetComponent<Enemy>().col.Length);
e.renderer.material.color = e.GetComponent<Enemy>().col[newCol];
}
if(objString == "Player");
{
int newCol = Random.Range(0, p.GetComponent<Player>().col.Length);
p.renderer.material.color = p.GetComponent<Player>().col[newCol];
}
}
}
|
|
|
|
|
|
|
|
Канал Игры Мечты: «Unity -- учим вместе» |
|