Сразу оговорюсь я работаю с UnrealEngine2Runtime то есть вторая версия движка, так сложилось. Поэтому тема возможно немного не сюда но движки всёж близкие родственники.
В общем на данный момент пишу симулятор довольно инертного транспортного средства. Всю физику движения объекта поместил в PlayerPawn(наследуется от Pawn) (расчитывается каждый тик), управление объектом вынесено в PlayerController. Пока всё делал локально всё было как и положено просто великолепно, но когда пришло время сети всё стало очень нехорошо.
Попробую описать поподробней:
1. Положение+направление камеры привязано к положению PlayerPawn
event PlayerCalcView(out actor ViewActor, out vector CameraLocation, out rotator CameraRotation ){ local PlayerPawn tmp; tmp = PlayerPawn(Pawn); CameraRotation = tmp.GetRotation(); CameraLocation = tmp.PlayerPosition; }
2. Кнопки(и оси) управления передаются на сервер через реплицируемую функцию, с сервера приходят основные свойства объекта положение/направление/скорость.
В итоге упраление очень дёрганое просто до ужаса примерно как будто обработка идёт 2-3 раза в секунту. Я так понимаю это время на отработку действий по сети, то есть уход нажатия кнопок, возвращение новой позиции/поворота.
Вопросы:
1. Можно ли заставить "локальный" PlayerPawn реагировать мгновенно, и только при приходе данных с сервера "подгонятся" под них, то есть нажал кнопку сразу пошёл поворот.
2. Можно ли как то заставить движок симулировать физику, у меня она очень инертна и должна хорошо симулироваться.
VBKesha
> Можно ли заставить "локальный" PlayerPawn реагировать мгновенно, и только при
> приходе данных с сервера "подгонятся" под них, то есть нажал кнопку сразу пошёл
> поворот.
Обычно в мультиплеерных гонках вся физика считается параллельно на клиенте, и на сервере. После клиент шлет данные на сервер и поведение транспортного средства у клиента сверяется с поведением на сервере. При существенных расхождениях в поведении верной принимается серверная модель. Положение транспортного средства корректируется. Это позволяет обеспечить плавность и реалистичность движения машин и избежать нежелательных действий со стороны клиента (читерства).
С коллизиями между транспортными средствами игроков сложнее. Как правило их не считают вообще, потому как на медленных соединениях из-за лагов это приводит к серьезным артефактам поведения.
> 2. Можно ли как то заставить движок симулировать физику, у меня она очень
> инертна и должна хорошо симулироваться.
Касаемо UE2 ничего не скажу. В UE3 физика поддерживается движком.
VBKesha
Э... нет ли модификатора simulated для функций ? Помнится, у Епиков был мануальчик такой для сетевых дел
Всем спасибо, но кажется ошибка нашлась, я каждый тик по сети передавал управление не зависимо от того менялось оно или нет, перепишу по нормальному дальше будет видно что получится.
VBKesha
Так обрати внимания на репликации - ибо нечего слать каждый тик что не поподя :)
Запутался я с репликаицей окончательно, хотя сделал что мне надо но как я это сделал мне совсем не нравится.
Не могу понять как одновременно вызвать функцию и на клиенте и на сервере. Сейчас PlayerController создаёт структуру с кнопками управления и передаёт в PlayerPawn к которому прикреплён, через функцию SetControl. Так данная функция описана правилом
replication { reliable if(Role < ROLE_Authority) SetControl; } [code] Соответсвенно она вызывается на сервере. А надо чтобы она отрабатывала и на сервере и на клиенте. После долгих и неправильных мучений я сделал аналог функции SetControl назвал SetControl2 [code]replication { reliable if(Role == ROLE_Authority) SetControl2; }
Соотвественно он реплицируется с сервера на клиент. Делает она тоже что и SetControl, и вызывается из SetControl.
function SetControl(Controll pControll){ PLControll=pControll; SetControl2(pControll); }
В общем то это работает но смотрится крайне бредово на мой взгляд, может ктото знает как сделать правильно?
VBKesha
> Не могу понять как одновременно вызвать функцию и на клиенте и на сервере.
Никак не получится через simulated методы ?
Какие там есть модификаторы для методов ?
Тема в архиве.
Официальный сайт Слотокинг obzor365.com |