Объясните, в чем смысл кода ниже - кода передвижения игрока.

Он же некорректный.
Подобный код часто пишут в примерах, в том числе его выдает и чат gpt.

Пример 1.
public float moveSpeed = 5f; // Скорость движения.
private void FixedUpdate()
{
float horizontalInput = Input.GetAxis("Horizontal");
Vector2 movement = new Vector2(horizontalInput * moveSpeed * Time.fixedDeltaTime, rb.velocity.y);
rb.velocity = movement;
}
Итого скорость по оси x = horizontalInput * moveSpeed * Time.fixedDeltaTime = 1*5*0.02 = 0,1.
Это движение со скоростью улитки. И Time.fixedDeltaTime - константа, умножение бесмысленно.


Пример 2.
public float moveSpeed = 5f; // Скорость движения.
private void Update()
{
Vector3 movement = new Vector2(horizontalInput * moveSpeed*Time.deltaTime, rb.velocity.y);
rb.velocity = movement;
}
Итого скорость по оси x = horizontalInput * moveSpeed * Time.deltaTime
Time.deltaTime - разное
1*5*0.018 = 0,009.
1*5*0.009 = 0,045
Это движение со скоростью улитки и постоянными рывками т.к. каждый кадр расстояние зависит от Time.deltaTime, а оно разное.
Выглядит ужасно.

В чем смысл такого кода? Его же невозможно использовать.

13 ответов

75 просмотров

Так не используй, пиши сам.

Евгений- Автор вопроса
.
Так не используй, пиши сам.

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

Time.deltaTime тебе помогает сохранить скорость в реальном времени при каких-то глюках в игре. У тебя может быть пропуск кадров, но Time.deltaTime это скомпенсирует и движущийся объект при глюках не будет замедлятся. Time.deltaTime тебе возвращает время в виде кратности, которое прошло с момента предыдущего кадра. Чем оно выше - тем дальше transform.position передвинет твой объект.

Maximus3632🇺🇦
Time.deltaTime тебе помогает сохранить скорость в ...

Там в примерах ещё есть такая переменная как speed. Она и делает передвижение обьекта быстрее и в тоже время за счёт Time.deltaTime твой объект будет "иметь иммунитет" от зависаний.

Евгений- Автор вопроса
Maximus3632🇺🇦
Time.deltaTime тебе помогает сохранить скорость в ...

Я читал мануал. При Time.deltaTime будет ужасный эффект дерганья - что очевидно т.к. это и есть компенсация расстояния.

Евгений
Пишу, тоже получаю баги, как и описал выше с тряск...

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

Евгений
Я читал мануал. При Time.deltaTime будет ужасный ...

Если у тебя что-то дёргается, то это значит, что у тебя в коде что-то не так

Евгений- Автор вопроса
Maximus3632🇺🇦
Хто может быть только из-за не правильного времени...

FixedUpdate() { Vector3 movement = new Vector2(horizontalInput * playerRunSpeed , rb.velocity.y); rb.velocity = movement; } Весь код передвижения. И камера по дефолту от синемашин с объектом-игроком для слежения. Всё. "Нет. Ты не прав" - ?? Это суть - оно почти всегда разное. Проверить легко Update() {Debug.Log(Time.deltaTime);} У меня разные числа.

Евгений
FixedUpdate() { Vector3 movement = new Vector2(hor...

Update вызывается настолько часто, на сколько это возможно. Я проверял. У меня update вызывается около 300 раз в секунду и там разница колеблется в пределах 1-2 раза. То есть от 298 до 202 к примеру. Когда используешь FixedUpdate то он у меня вызывался 40 раз в секунду. Это скорее и есть частота кадров - но. Это так к слову. Time.deltaTime считает разницу между кадрами как я сказал выше. Чем выше задержка между кадрами - тем больше число Time.deltaTime.

Update и FixedUpdate вызываются через определенные промежутки времени. Чтобы движение считалось корректно нужно домножать на пройденное время с момента последнего вызова, потому что s = v * t, s — пройденное расстояние, v - скорость, t — пройденное время.

рывки из-за неровного fps могут быть. вот эту галку можешь тыкнуть для выравнивания фпс

Drawing Dead
screenshot рывки из-за неровного fps могут быть. вот эту галк...

Это не нагрузит проект доп. вычислениями?

Maximus3632🇺🇦
Это не нагрузит проект доп. вычислениями?

да вроде не должно, у меня на стареньком xiaomi фпс более ровный стал, по перфе ничего не просело

Похожие вопросы

Обсуждают сегодня

Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
Подскажите, пожалуйста, где в backende, или не в нем можно дату поправить? Логирует действия не в том часовом поясе
Лео
7
Есть магистры regex в чате? Задача: нужно написать regex который мэтчит полные (без сокращений по типу ::1/128) ipv6 адреса кроме 2001:0df7:cef7:29f7:52f7:adf7:2cf7:4ff7, при ...
Илья
5
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
Привет! Подскажите может кто сталкивался, при создании купона выходит вот в таком виде окно. Как поправить это?
Ruslan
4
Ребята, я за проф советом😅 По микросервисам. В монолите есть общие файлы для сервисов: фетчи, конфиги, либы, утилсы.. как при распиле правильно их поддерживать? Пока вариант д...
Александр Тарасюк
1
Помните я тут рассказывал про таролога программистку? Мне выдали новый мем
Magic
6
DataGrip не сканирует почему-то все таблицы, хотя раньше показывал их че за херня, сталкивались?
Magic
9
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Карта сайта