Разница в импульсной силе в Unity и Unreal

Возьмем в самолет шар массой 30 кг. Я хочу, чтобы мяч подпрыгнул. Гравитация установлена ​​на -10 в Unity или -1000 в Unreal.

В Unity я использую эту строку, чтобы мяч подпрыгивал: AddForce(Vector3.up * 9 * 30, ForceMode.Impulse). Мяч при прыжке поднимается на 4 метра.

В Unreal вместо этого я использую это: AddImpulse(FVector::UpVector * 900 * 30). Мяч при прыжке поднимается на 18 см.

В настоящее время я перехожу от Unity к Unreal, и мне хотелось бы знать, почему существует такая большая разница, даже если значения Unreal были умножены на 100, потому что Unreal указан в см.

Согласно моему тесту, мне нужно вызвать AddImpulse(FVector::UpVector * 4200 * 30), чтобы добиться такого же результата, то есть примерно в 4,5 раза больше силы.

ОК, вы обнаружили, что вам нужны разные цифры... в чем здесь собственно вопрос?

BugFinder 27.06.2024 17:34

Почему поведение не одинаково, даже если ценности одинаковы? Физические формулы не меняются и универсальны, не так ли? Я хочу знать, откуда такая разница.

Émile Pettersen-Coulombe 27.06.2024 18:36

Обратите внимание, что физические системы в игровых движках просто «имитируют» реальный мир. В большинстве случаев они допускают множество упрощений. Хотя обычно они стараются быть ближе к реальному миру. Хотя просто приведу два противоположных примера: в Unity «перетаскивание» — это всего лишь линейный фактор, на который не влияет CV или область атаки. Кроме того, Unity не сохраняет угловой момент, а только угловую скорость. Так что это не отражает того, как ведет себя реальный мир. Вы никогда не получите эффект теоремы о средней оси в Unity. Не могу говорить за Unreal.

Bunny83 28.06.2024 09:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я никогда не использовал Unreal, поэтому не знаю, с какими модулями они на самом деле работают. Unity старается максимально приблизиться к реальному миру. Сила использует Ньютоны (кгм/с²), импульс использует кгм/с. Когда вы применяете импульсную силу в Unity, вы фактически просто добавляете определенное количество скорости (здесь я объяснил 4 различных режима силы в Unity).

Быстрый поиск в Google подтвердил, что Unreal обычно использует сантиметр в качестве базовой единицы, но, похоже, это не всегда так, поскольку в их собственных играх (Unreal Tournament) используется 2 см/единица. Поэтому я не знаю, как в Unreal работают единицы измерения, их преобразования и соглашения.

Предполагая упомянутые вами значения, в Unity, когда гравитация установлена ​​на 10m/s², а вы, по сути, устанавливаете начальную скорость на 9m/s (в результате вашей импульсной силы), мы получим время 0.9s, пока не достигнем вершины. Пройденное расстояние будет 1/2*a*t², то есть 1/2 * 10m/s² * (0.9s)², что дает нам высоту 4.05m. Таким образом, это кажется правильным, когда не применяется трение или сопротивление.

Как я уже сказал, я не знаком с Unreal, поэтому понятия не имею, как у вас получилось 18 см. Может быть, в Unreal применяется что-то вроде перетаскивания?

Вы можете добавить перетаскивание, но я установил его на своем шаре в Unreal равным 0. Так что да, это имеет смысл в Unity, но не имеет смысла в Unreal.

Émile Pettersen-Coulombe 28.06.2024 22:24
Ответ принят как подходящий

Я наконец нашел проблему. В Unreal общая масса актера — это сумма масс каждого компонента этого актера.

Поскольку на моем шаре были коллайдер и сетка, масса сферического коллайдера была установлена ​​на 30, а масса сетки была рассчитана автоматически, поскольку я не переопределил это значение. Установив массу сетки равной 0, я теперь имею одинаковое поведение с обоими движками.

Другие вопросы по теме