• Как сделать реалистичное положение ног на земле?

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

    Zefirot
    @Zefirot Автор вопроса
    K0TlK, покрутив повертев сделал следующее - при отсутствии земли у персонажа материал меняется на "скользкий", при приземлении меняется на "жесткий".
    Побегал проверил вроде всё нормально, по ступенькам бегает,с крутых подъёмов скатывается, на земле стоит нормально, в общем работает нормально...
  • Как можно оптимизировать (уменьшить) передачу данных?

    Zefirot
    @Zefirot Автор вопроса
    12rbah, это я так вычитал, это не утверждение, это предположение...
    так то я вот пересылаю строку (выше показывал какого типа), ну и предположительно 2 байта символ, на самом деле сколько не знаю, не замерял...
  • Как можно оптимизировать (уменьшить) передачу данных?

    Zefirot
    @Zefirot Автор вопроса
    12rbah, спасибо.
    для вас адекватный способ - это то, что вам посоветовали ниже

    да, вот сейчас встраиваю MessagePack, с ним буду работать.
  • Как можно оптимизировать (уменьшить) передачу данных?

    Zefirot
    @Zefirot Автор вопроса
    12rbah, так я вот и интересуюсь как правильно рассчитать, как оно на самом деле будет на больших объёмах...
    А касательно метаданных, они какую часть занимают, как рассчитываются?
  • Как сравнить позиции до и после движения одного объекта?

    Zefirot
    @Zefirot Автор вопроса
    freeExec, вот
    Debug.Log(MoveDirection + " >>> " + NewPosition + " != " + OldPosition);

    (-1.0, 0.0, -0.9) >>> (-3.1, 0.0, 4.1) != (-3.1, 0.0, 4.1)

    то есть как бы движение есть, прогресса нет...

    И потом, MovePosition двигается к следующему тику физики.

    я так и понял, похоже дополнительно в апдейте нужно делать проверку позиции предыдущего кадра...
  • Почему Gizmos.DrawCube не следует за кубом?

    Zefirot
    @Zefirot Автор вопроса
    K0TlK, IsGrounded постоянно выдаёт True, даже при прыжке когда куб явно ни с чем не соприкасается, я захотел это визуально посмотреть что не так, а оно вот статически стоит на месте, я так понимаю что и Physics.CheckBox( там же проверяет на месте....@K0TlK,
    в мировых и локальных координатах была проблема, вот так работает
    Gizmos.DrawCube(transform.TransformPoint(GroundCheckerPosition), GroundCheckerSize);

    хоть и только в авейке задано...
  • Почему Gizmos.DrawCube не следует за кубом?

    Zefirot
    @Zefirot Автор вопроса
    K0TlK, IsGrounded постоянно выдаёт True, даже при прыжке когда куб явно ни с чем не соприкасается, я захотел это визуально посмотреть что не так, а оно вот статически стоит на месте, я так понимаю что и Physics.CheckBox( там же проверяет на месте....
  • Почему Gizmos.DrawCube не следует за кубом?

    Zefirot
    @Zefirot Автор вопроса
    K0TlK, да и в апдейте задавал, всё равно тоже самое...
    (помещал содержимое авейка в апдейт)
  • Как правильно определить соприкосновение?

    Zefirot
    @Zefirot Автор вопроса
    Зачем тебе вообще эти 4 рейкаста?

    так лучше определять землю под ногами, если один по центру то будут провалы, то есть ноги еще должны стоять на поверхности а луч уже падает в пропасть.
    Зачем тебе GroundTouchPoint в виде трансформа, когда там просто вектор должен быть?

    ну а как мне еще получать позиции учитывая что они постоянно двигаются, статически вначале вектор не получится задать, при поворачивании они останутся на месте.
    Зачем тебе K&R стиль отступов, когда в c# используется Allman?

    привычка...
  • Как вычислить разницу между Quaternion?

    Zefirot
    @Zefirot Автор вопроса
    у меня конечные значения статично вбиты

    private Quaternion dirW = new Quaternion(0f, 0f, 0f, 1f);
    private Quaternion dirS = new Quaternion(0f, 1f, 0f, 0f);
    private Quaternion dirA = new Quaternion(0f, 0.7f, 0f, -0.7f);
    private Quaternion dirD = new Quaternion(0f, 0.7f, 0f, 0.7f);
    private Quaternion dirWA = new Quaternion(0f, 0.4f, 0f, -0.9f);
    private Quaternion dirWD = new Quaternion(0f, 0.4f, 0f, 0.9f);
    private Quaternion dirSA = new Quaternion(0f, 0.9f, 0f, -0.4f);
    private Quaternion dirSD = new Quaternion(0f, 0.9f, 0f, 0.4f);
    ......
       RotationRequired = CalcRotation(DirMove); // направление относительно нажатых клавиш
    .......             
    private Quaternion CalcRotation(string d){
      Quaternion q = RotationCurrent;
      switch(d){
        case "w": q = dirW; break;
        case "s": q = dirS; break;
        case "a": q = dirA; break;
        case "d": q = dirD; break;
        case "wa": q = dirWA; break;
        case "wd": q = dirWD; break;
        case "sa": q = dirSA; break;
        case "sd": q = dirSD; break;
        }
      return q;
      }

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

    Zefirot
    @Zefirot Автор вопроса
    K0TlK, сделал через MoveTowards, почти то что нужно, каждое новое движение идёт рывок потом плавно, думаю нужно какую-то задержку делать и отправку данных не каждый кадр, в общем это нужно тестировать, но уже сдвиг есть, спасибо буду тестить...
  • Как сделать плавное равномерное передвижение?

    Zefirot
    @Zefirot Автор вопроса
    K0TlK, в клиенте он нормально двигается, в верхней части задаётся а в нижней (на самом объекте) происходит движение, так как в клиенте нет никаких задержек и дельта совпадает то и движение плавное, а вот при передаче на другом клиенте дергается, потому что там дельта другая...
  • Как сделать плавное равномерное передвижение?

    Zefirot
    @Zefirot Автор вопроса
    freeExec, так а как его пересчитывать?
    ведь разные пк будут по разному пересчитывать.
    Может как-то отталкиваться от реального времени, мол 1 метр должен преодолеваться за 1сек, если пришли координаты на пол метра то значит в реальном времени он должен этот отрезок пройти за пол секунды, вот на этом моменте в лерп должно быть задано значение которое будет равняться половине секунды реального времени, как?
  • Как сделать плавное равномерное передвижение?

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

    Zefirot
    @Zefirot Автор вопроса
    K0TlK, но так никак не будет синхронно всё перемещаться, ведь если при передаче будут теряться пакеты то и длительность нажатия (передачи время нажатия) будет разная, таким образом зажатие кнопки к примеру вверх 2сек будет передано как вверх 1.5сек и соответственно передвижения будет на другие координаты...
    Я считаю что передача конечных координат правильный подход, но при этом нужно чтобы объект перемещался на разный отрезок с равной скоростью перемещения и на любых ПК эта скорость была одинаковая относительно реального времени, в этом загвоздка...
  • Как сделать плавное равномерное передвижение?

    Zefirot
    @Zefirot Автор вопроса
    freeExec, Time.fixedDeltaTime?
    Или что за дельта физики?
    Я просто не в курсе как правильно делать ...
  • Как сделать плавное равномерное передвижение?

    Zefirot
    @Zefirot Автор вопроса
    freeExec, как тогда правильнее сделать так что объект передвигался на разных ПК на равное расстояние за равное время? (учитывая что есть от координаты А и В)
  • Как сделать плавное равномерное передвижение?

    Zefirot
    @Zefirot Автор вопроса
    Ты пробовал просто позицию полученную по сети подставлять без интерполяции?

    не ну так то позиция чётко сразу и правильно ставится, но объект то телепортируется..
    (я имею ввиду объекту сразу присваивать позицию без лерпа)
    без относительно фреймворка, передавай не позицию объекта, а его управление (команды на изменение поведения, повтороты, изменения скорости и т.п.,

    передавать когда нажата кнопка, думаю это не вариант, ведь длительность нажатия будет разная при передаче.
    Ты используешь Vector3.Lerp который считает расположение точки между двумя указанными позициями

    думал при фиксапдейте будет равное передвижение.
    Вот и думаю как правильно сделать...
  • Как сделать плавное равномерное передвижение?

    Zefirot
    @Zefirot Автор вопроса
    как тогда на разных пк иметь равную скорость?
    я такую тему подымал и мне говорили что привязывать нужно к дельте тайм, и вроде как на разных пк равная скорость, если не по сети, вот я и сижу и сам думаю как его правильно сделать...