Size: a a a

2020 October 13

Ю

Юрий in Unreal Engine
Михаил Лукьянов
с dead reckoning конкретно все более сложно.
Как правило, используется один из двух вариантов
1) Зажатая клавиша - В случае пропадания соединения, сетевая сущность рекурсивно залипает на последнем пассивном действии (если игрок), или на активном и пассивном действии (если ии). В первом случае, если сеть восстановилась то игрок телепортируется (или мягко перемещается через интерполяцию) в нужные координаты. Активные действия (стрельба) не засчитываются. ИИ же либо действует по тому же сценарию, либо в момент восстановления сети пытается обменятся всеми выполненными действиями, а сервер уже решит что засчитать, а что нет в зависимости от собственной дельты.
2) Idle - все ровно тоже самое, но в этом случае игнорируются любые действия как ИИ, так и игроков до момента восстановления, за исключением пассивных собственных действий отвалившегося клиента.

в UE реализован второй метод как метод по умолчанию. Детали программируется.
понял пасеба

анрил не получится использовать как референс
источник

Ю

Юрий in Unreal Engine
Denis Кришнаход
Очень неплохо есть такой классический пример из халвы,тим форттреса и из сорса движка как он проводит экстраполяцию все идентично. Например враг стреляет в вас во время лага или задержки пинга, вы стоите или заворачиваете за угл и пуля по идее на сервере врезается в стену. Для игрока это выглядит следующим образом вы замечаете что снайпер в вас сейчас выстрелит нырете за стену и уже мгновение думаете что пронесло, но сервер вас убивает как будто вы не успели скрыться вовремя. Насколько помню халву и сорс там сервер авторитарный который пишет всю историю игрока Снапшутинг до нужного момента чтобы отмотать спорный момент и решить кто сдохнет 😂. Тривиальный момент для сетевого гуру и вовсе не тривиальная задача для имплементации на сервере ибо даже в ААА шутанах в больших компаниях иногда ложили болта на это как и Эпики в своей реализации. Сорс один из лучших решений так как он расситан вообще на отклонения в пинге как и должно быть для CS,Halflife,TF соревновательных шутеров. Насколько помню базовые алгоритмы там брались из открытых исходников Дума так как там были одни из первых таких наработок в зачаточном состояние. https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
спасибо большое
будем заимствовать опыт оттуда🌚
источник

IK

Ivan Kurulyuk in Unreal Engine
Ребят, хочу реализовать притяжение бонуса к игроку, когда он оказывается в опредленном радиусе от бонуса.
Сделал коллизию-сферу, настроил реакцию на оверлап игроком, настроил перемещение. Но, не нравится, что актор бонуса улетает мгновенно, хочу "шоб красиво". Сделал через Vinterpto перемещение, но есть нюанс.
Если я правильно понял,  Vinterpto будет нормально работать если выполняется в тике, а у меня всё срабатывает на событие оверлапа и один раз.
Кроме решения в лоб - вешать на тик отслеживание оверлапа с игроком и после этого выполнять интерполяцию есть еще какие-либо варианты реализации? Нельзя как-то по событию запустить "эвент тик" а потом выключить ?
источник

M(

Micron (Edward) in Unreal Engine
Ivan Kurulyuk
Ребят, хочу реализовать притяжение бонуса к игроку, когда он оказывается в опредленном радиусе от бонуса.
Сделал коллизию-сферу, настроил реакцию на оверлап игроком, настроил перемещение. Но, не нравится, что актор бонуса улетает мгновенно, хочу "шоб красиво". Сделал через Vinterpto перемещение, но есть нюанс.
Если я правильно понял,  Vinterpto будет нормально работать если выполняется в тике, а у меня всё срабатывает на событие оверлапа и один раз.
Кроме решения в лоб - вешать на тик отслеживание оверлапа с игроком и после этого выполнять интерполяцию есть еще какие-либо варианты реализации? Нельзя как-то по событию запустить "эвент тик" а потом выключить ?
Можешь timeline сделать для анимации полета. Выставляешь в таймлайне время и переменную float которая изменяется от 0 до 1 на графике - это будет альфа. В update таймлана делаешь лерп по этой альфе от начального положения до target. Активируешь timeline на оверлап.
источник

IK

Ivan Kurulyuk in Unreal Engine
О, что-то до таймлайнов я не додумался
источник

IK

Ivan Kurulyuk in Unreal Engine
Спасибо, попробую
источник

n

norlin in Unreal Engine
Михаил Лукьянов
ну эта штука... считай по уровню сравнима с пресловутой теорией "Всего"
ведь задача экстраполяции предсказать математически действия игрока с достаточно высокой точностью. Алгоритмов не так много существует.
Обычно, как самый простой и относительно действенный вариант - это вынос игровой логики (движений, стрельбы и прочих активностей, которые одномоменто может выполнить игрок каким-либо путем воздействия) за игровой тик (сабтики, треды с константным временем шага, итд). В общем любой метод, который позволяет как можно больше сблизить игровые обновления клиента с обновлениями сервера.
В таком сценарии если сетевое отклонение, из-за потерь, или пингов и будет, то оно будет относительно небольшое, и их можно добить обычной интерполяцией данных через промежуточное значение.

Минус такого подхода - зависимость от железа, поэтому игры, которые этот метод используют как правило уходят в полный авторитарный сервер, который крутится на офигенно крутом железе (Elite: Dangerous, Star Citezen, как пример, где такой метод используется на данный момент). Но из-за его фактической простоты реализации используется почти везде в том или ином виде.

Есть метод предсказания, где интерполяция происходит без участия сети по факту. Тут сам клиент думает где он должен бы оказаться и подталкивает игрока к этому месту, слегка воздействуя на инпуты. Но он гораздо сложнее, и как правило более непредсказуем. Используется по этой причине редко, но активно разрабатывается (на факультативной основе)
в Elite Dangerous наоборот вообще нет геймплейных серверов
источник

МЛ

Михаил Лукьянов... in Unreal Engine
norlin
в Elite Dangerous наоборот вообще нет геймплейных серверов
вообще-то есть.
источник

n

norlin in Unreal Engine
Михаил Лукьянов
вообще-то есть.
вообще-то нет :)
источник

МЛ

Михаил Лукьянов... in Unreal Engine
ну т.е. по твоему там все в p2p ? включая экономику, bgp,да ? В p2p у них только движения выведены и частично стрельба.
источник

n

norlin in Unreal Engine
Михаил Лукьянов
ну т.е. по твоему там все в p2p ? включая экономику, bgp,да ? В p2p у них только движения выведены и частично стрельба.
я же сказал - геймплейных серверов нет. BGS, понятное дело, на серверах крутится
источник

n

norlin in Unreal Engine
т.е. понятие "авторитарный сервер" к Элитке малоприменимо. Вся боёвка вообще 100% p2p
источник

МЛ

Михаил Лукьянов... in Unreal Engine
ну в этом смысле да, пример не совсем удачный.
источник

S

Soap in Unreal Engine
народ подскажите плс, как в блупринтах переменной actor выставить nullptr?
источник

VS

Vladimir SHCHerba in Unreal Engine
Да ладно, ну гуглится же за минуту.
источник

S

Soap in Unreal Engine
да вот херню мне выдает
источник

S

Soap in Unreal Engine
что у челиков ошибки nullptr
источник

VS

Vladimir SHCHerba in Unreal Engine
источник

S

Soap in Unreal Engine
а я просто хочу в переменную nullptr записать
источник

N

NoCodeBugsFree in Unreal Engine
Soap
народ подскажите плс, как в блупринтах переменной actor выставить nullptr?
set
источник