So dämpfen Sie „linearDamping“ nur in horizontalen (x/z) Achsen in der Physik von RealityKitIOS

Programmierung für iOS
Anonymous
 So dämpfen Sie „linearDamping“ nur in horizontalen (x/z) Achsen in der Physik von RealityKit

Post by Anonymous »

In RealityKit gibt es eine lineare Dämpfung, die die Geschwindigkeit der Physik mit einem „Drag“-Effekt verlangsamt (oder es fühlt sich an, als würde die Luft „dicker“).
Zum Beispiel:

Code: Select all

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

// here
body.linearDamping = 2.0
Dies verlangsamt die Bewegung in allen 3 Achsen. Allerdings würde ich es vorziehen, keine Dämpfung auf die y-Achse anzuwenden, da die Dinge dadurch langsamer fallen. Ich möchte nicht die Schwerkraft der gesamten Szene ändern, da die Dämpfung nur für einige, aber nicht alle Entitäten gelten sollte.
Ich habe versucht, PhysicsMotionComponent zu verwenden und seine lineare Geschwindigkeit in Aktualisierungsaufrufen manuell anzupassen:

Code: Select all

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)

Allerdings hat es nicht funktioniert, weil PhysicsMotionComponent immer Null ist (anscheinend bewegt der Physikkörper und die Schwerkraft die Entität, ohne automatisch eine PhysicsMotionComponent zu generieren)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post