0 votes

Could someone please explain to me why offsetting a force vector initially perpendicular to the z axis turns the rigid body on the x axis, does it only offset the origin of the vector if yes how do I fix this issue?

Code in question:

add_force(thrust, $".".get_translation() + $"Submarine Rig/mast".get_translation())
in Engine by (16 points)

1 Answer

0 votes

If you look here:

Then you'll see that the position is actual an offset in global coordinate space.

Personally I only use apply_impulse but I assume (also according to the old Godot 2.x related post above) that add_force works in a similar fashion. (Sadly, the docs are sparse for add_force).

You get the global offset for a child object like this:
$MyChild.global_transform.origin - global_transform.origin (I omitted the self. or $"." to the second global_transform adressing the "parent" itself as it is not needed here.)

Keep in mind that the force vector itself is in global space.

Here also some info about add_force by kidscancode:

If you run into problems here then consider using apply_impulse instead repeatedly from inside _integrate_forces or _physics_process. Multiply the force by delta so the multiple impulses add up to the force over a second. The advantage is that these impulses can be adjusted in position and direction every physics frame.

I also tried to post some info here. (It contains some text about apply_impulse but not add_force):

by (3,350 points)
edited by
Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read Frequently asked questions and How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to [email protected] with your username.