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

Он же некорректный.
Подобный код часто пишут в примерах, в том числе его выдает и чат 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 ответов

136 просмотров

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

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

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

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 фпс более ровный стал, по перфе ничего не просело

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта