• Как установить идентичное время на сервере и клиенте?

    @Zimaell Автор вопроса
    Ну мне нужно чтобы время клиента и сервера совпадало, я на сервере генерирую действия которые должны произойти в определенное время на клиенте...
    Если у вас кривое время - его надо перевести.

    В смысле кривое время? Ео как-то нужно на сервере синхронизировать с каким-то центральным сервером как это у майкрософт или как?
  • Как получить разницу в миллисекундах из 2х дат?

    @Zimaell Автор вопроса
    xmoonlight, да решил делать именно так как задумал.
    Время на сервере и на устройстве всегда одинаково, ведь часы то у всех всегда показывают одинаковое время, не думаю что на сервере будет 15:00:01 а на устройстве 15:00:10 в один и тот же момент...
    Хотя если такое возможно то думаю можно делать какую-то синхронизацию по серверу и вести внутренний таймер, как то так, пока что с этим проблем нет, часы показывают идентичное время...

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

    Посмотрим что из этого выйдет...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    Короче нужно новую тему открыть с более конкретным вопросом, может чего интересного и подскажут...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, ну как я говорил выше вмешательство не столь частое, так чтобы можно было как-то повлиять но не ежесекундно что-то менять...
    А так - будет у всех клиентов разное игровое время

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

    @Zimaell Автор вопроса
    xmoonlight, простите но я не понимаю как это, я думал просто формулу нужно вывести, просто один метод который будет вычислять и задавать скорость, как по другому не понимаю...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, эмм, и вот все же вернулись назад, нужно вычислять переменную скорости исходя из того что есть две точки и эти точки нужно преодолеть за нужное время.
    То есть как-то функция это должна вычислять, как только....
    Как-то при старте клиента должно рассчитываться время перемещения на данном устройстве...
    Плин как...?
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, стоп, то есть может быть разница так же и от анимации объекта и от количества объектов на сцене?
    Разве есть разница между - 1юнит со скоростью 2 передвигается или 1000 юнитов с такой же скоростью, они должны же по времени быть в одном и том же месте, хоть 1 хоть их 1000, хоть это сфера, хоть анимированный...
    Или все печальнее?
    то есть если я ему задам определенную скорость и он должен быть через 3 сек в нужной точке, то он там будет? Или еще зависит от окружения?
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, в общем методом народного тыка вычислять данные, что ж потестирую посмотрю что получится, главное вычислить константу которая будет равняться 1 секунде игрового времени перемещения и реального...
    типа 1 клетка это метр, ну и там движение 1метр/секунда...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, можно чтобы было короче показать на примере как задать скорость
    вот движение
    Speed = ???
    transform.position = Vector3.MoveTowards(transform.position, TargetPoints, Speed * Time.deltaTime));

    сейчас объект находится в начальной точке (1х1х1), TargetPoints (3х1х3) это куда ему нужно добраться, из точки А до В ему нужно добраться к примеру за 3.4 секунды, какая должна быть формула для вычисления Speed?
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    Допустим за 10 мин боя пользователи могут повлиять на бой 10 раз, зачем делать реалтайм если лучше сразу все просчитать, более выгодно так...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, это значит что весь сценарий кто куда должен пойти, кто где когда должен находится, кто в кого сколько раз стрельнет, это все просчитывается сразу, наперед...
    А ЕСЛИ игрок что-то заюзает, то сценарий мгновенно перепысывается под новые реалии...
    Действия игроков незначительны - например поднять щит на 10 сек на главной базе, пустить на определенные координаты бомбу (коих ограничено), дать команду авиации нанести удар по месности или нападающий дал команду отступить т.д. Нажал что-то, пошел запрос на сервер, там исходя из новых реалий переписался сценарий, и вот мы смотрим происходящее дальше с изменениями внесенными пользователями...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, начальный от какого момента? от момента согласно времени где он должен находится в данное время...
    Зашел в 15:00:01 видит он в точке А, вышел из игры зашел через 20 секунд он в точке В, а если зашел не через 20сек а через 10сек то юнит между А и В...
    По поводу код должен быть один - не так, на сервере сценарий рассчитывается на PHP, сохраняется это все в бд, когда игрок заходит то загружает этот сценарий и смотрит его...

    Весь вопрос стоит в том - как рассчитать движение из А в В за определенное время, задать юниту именно ту скорость с которой он пройдет этот отрезок, в этом вопрос стоит...
    То есть из А до В он должен дойти к примеру за 3.4 секунды, какое значение скорости у него должно быть...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, зашел игрок в середине боя, с какого места счетчика ему считывать?
    Должна быть привязка ко времени, так как весь бой от начала до конца просчитывается за доли секунд до самого конца, обработка боя не идет в режиме онлайн, это слишком затратно...
    Поэтому когда он залетел в бой то он должен начинать читать сценарий с того кадра (времени) который сейчас должен быть...

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

    Ведь игра в стиле Tower Defence, это не контерстрайк или дота там где идет динамический обмен данными, тут пошла волна по определенной траектории, башни знают где и когда кто пройдет, поэтому все можно рассчитать и отправить грубо говоря мультик посмотреть, иногда немного интерактивный...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, нужно учитывать то что во время боя никого может и не быть онлайн, а потом посреди боя кто-то зашел, а то и оба зашли...
    Пусть даже будет расписано в какой клетке в какое время должен находится юнит, не вопрос...
    Какой формулой рассчитать скорость движения в клиенте чтобы совпадало с временем посекундно?

    То есть юнит движется со скорость Speed = 2f, Speed * Time.deltaTime, за какой отрезок реального времени он пройдет отрезок к примеру в 10 клеток, дабы рассчитать на сервере формулой на какой клетке он должен быть в определенное время?

    Грубо говоря с сервера отправляются данные юнита где он должен находится в определенные отрезки времени, а он должен высчитывать скорость так чтобы он передвигался четко со скоростю по времени.

    тот же пример выше
    индификатор | дата время | координаты x,y,z
    unit1 | 2020-08-07 15:00:00 | 0x0x0
    unit1 | 2020-08-07 15:00:10 | 2x0x2
    unit1 | 2020-08-07 15:00:15 | 4x0x2
    unit1 | 2020-08-07 15:00:20| 6x0x2

    то есть юнит должен от точки 2x0x2 до точки 4x0x2 идти 5 секунд реального времени, как это преобразовать в формулу которая вычислит скорость с которой он должен преодолеть этот путь?
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, так что с сервера нужно отправлять покадровое поведение юнита с микросекундах?
    Вплоть до того что в Update выводить каждый кадр?
    Что-то типа такого
    void Start(){
      frame[0] = позиция в пикселях +1;
      frame[1] = позиция в пикселях +2;
      frame[2] = позиция в пикселях +3;
            }
    void Update(){
      transform.position = Vector3.MoveTowards(transform.position, frame[n], ???);
      ++n;
      }

    ну суть я думаю ясна, передается покадровый массив и с каждым кадром передвигается на следующий кадр.
    В общем если это так то такое как-то не катит.
    Буду думать как сделать по другому...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, да но, игрок нажал поднять щит к примеру и в это время отправился запрос на сервер, расчет занимает доли секунд и изменения заносятся в бд, остальные клиенты каждые допустим 2 секунды посылают запросы, нет изменений все работает как и было, есть изменения обновляется сценарий и уже все видят действия...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, игрок может зайти во время уже идущего боя, поэтому привязка я думаю должна быть именно к реальному времени
    корректировка синхросигнала - каждые n-микросекунд

    зачем если по сценарию написано будет кто где должен быть в определенное время, кто в кого будет стрелять и т.д.
    Сама суть рассчитать именно скорость передвижения, то есть задать нужную скорость исходя из расчетов пути и отрезка времени...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    freeExec, да нет, контрой тут и не пахнет, игра в стиле Tower Defence, поэтому суть рассчитать на сервере траекторию передвижения юнитов и стрельбу по ним пушек, заложить это все в "покадровый" сценарий и отправить всем находящимся на данной локации, плюс как я уже говорил если кто-то что-то сделал (поднял щит или так запустил какой-то скилл во время боя к примеру) то на сервере идут перерасчеты и отправляется уже всем новый сценарий...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    xmoonlight, настоящее время то у всех одинаково? Если я не ошибаюсь...
    я вычисляю время на клиенте так
    public string rtm;
    void Update(){
      rtm = System.DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
      }

    перевел строку для наглядности, вывожу на экран и оно совпадает с серверным, получается осталось только рассчитать нужное значение для передачи скорости в transform.position, я так думаю, но может нужно иначе, пока что вот задумка есть а как её правильно реализовать не знаю...
  • Как задать движение по серверному времени?

    @Zimaell Автор вопроса
    Как это реализовать?
    Вот я оправил клиенту что юнит должен с точки А в точку В дойти за 3 секунды, с 15:00:00 до 15:00:03, что я ему должен передать?
    transform.position = Vector3.MoveTowards(transform.position, TargetPoints, ???);

    Так в клиенте я писал Speed * Time.deltaTime, а теперь как это должно выглядеть?