Страница 2 из 2

Re: Как правильно отключить TCP соединение чтобы сервер не спами

СообщениеДобавлено: 04 дек 2019, 11:27
Saltant
anomal3 писал(а):p.s. про 80 мс почитал :))
Но сразу в голову идёт игра от 1C (Caliber)
Задержка в 7-14 мс, как говорили разработчики, весь процесс на сервере, клиент просто отображает данные

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

Re: Как правильно отключить TCP соединение чтобы сервер не спами

СообщениеДобавлено: 04 дек 2019, 12:28
Tolking
Ведь таким образом крайне не удобно работать.

Каким таким?

Я, например, обычно работаю в 3 типа потоков. Один тип принимает сообщения, другой тип обрабатывает принятые сообщения, третий отправляет сообщения... В чем проблема обрабатывать сообщения в основном потоке? Мне удобно...

Re: Как правильно отключить TCP соединение чтобы сервер не спами

СообщениеДобавлено: 04 дек 2019, 12:36
Saltant
Tolking писал(а):
Ведь таким образом крайне не удобно работать.

Мне удобно...

А вот людям пришедшим в геймдев не из геймдева не много рвёт крышу от такой новости)) У меня бомбило вначале тоже, а потом вроде более менее привык.

Re: Как правильно отключить TCP соединение чтобы сервер не спами

СообщениеДобавлено: 04 дек 2019, 14:25
IDoNotExist
Saltant писал(а):А вот людям пришедшим в геймдев не из геймдева не много рвёт крышу от такой новости)) У меня бомбило вначале тоже, а потом вроде более менее привык.

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

Re: Как правильно отключить TCP соединение чтобы сервер не спами

СообщениеДобавлено: 04 дек 2019, 17:27
Jarico
Saltant писал(а):мне оно не сильно заходит, ну а более медленные онлайн игры делать можно не особо заморачиваясь с тиками сервера, выстрелами в будущее, отмотки времени назад и т.п паттернами.


В Source Engine это называется лагокомпенсация, при стрельбе игроки с пингом 200-300 мс могут убить других игроков но в пределах 20-30 тиков (0.25-0.5 мс), на каждый тик создаются копии сущностей игроков (копии хранят состояния анимации игроков, положение хитбоксов и прочую инфу) поэтому сейчас в CS:GO и играх на Source Engine полно читов которые могут откатывать состояния давая возможность убивать игроков даже если они уже зашли 2-3 секунды назад за непробиваемое препятствие.

Я пытался воспроизвести аналогичную систему в своих проектах но т.к. в юнити задействуется 1 поток из коробки (без использования ECS и Jobs) это будет выглядеть очень не красиво (микрофризы и т.д.)... Крч без ECS и многопоточности этого не достичь....