Как демпфировать `linearDamping` по горизонтальным осям (x/z) только в физике RealityKitIOS

Программируем под IOS
Ответить
Anonymous
 Как демпфировать `linearDamping` по горизонтальным осям (x/z) только в физике RealityKit

Сообщение Anonymous »

В RealityKit есть линейное демпфирование, которое замедляет физическую скорость с помощью эффекта «перетаскивания» (или создается ощущение, что воздух становится «гуще»).
Например:

Код: Выделить всё

var body = PhysicsBodyComponent(
shapes: [shape],
density: 1,
material: .generate(
friction: 0.8,
restitution: 0.8),
mode: mode)

// here
body.linearDamping = 2.0
Это замедляет движение по всем 3 осям. Однако я бы предпочел не применять демпфирование к оси y, поскольку оно замедляет падение. Я не хочу менять гравитацию всей сцены, поскольку демпфирование должно применяться только к некоторым, а не ко всем объектам.
Я попробовал использовать PhysicsMotionComponent и вручную настроить его линейную скорость в вызовах обновления:

Код: Выделить всё

struct RLPhysicsDampingSystem: System {
func update(context: SceneUpdateContext) {

// ...

// This is always nil, despite entities are moving
guard var motion = entity.getComponent(PhysicsMotionComponent.self),
else { continue }

var linVel = motion.linearVelocity
// Damping formula: e^(-d * dt)
let linDamping = exp(-damping.horizontalLinearDrag * Float(delta))
linVel.x *= linDamping
linVel.z *= linDamping
motion.linearVelocity = linVel

entity.components.set(motion)

Однако это не сработало, поскольку PhysicsMotionComponent всегда равен нулю (очевидно, PhysicsBody и гравитация перемещают объект без автоматической генерации PhysicsMotionComponent)

Подробнее здесь: https://stackoverflow.com/questions/798 ... its-physic
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»