Character SetActorLocation issues after standing on moving vehicle

I have a large ship and a first person character. The character is able to pilot the ship, i.e. character collision is turned off, hidden, and attached to a component of the ship while the controller possesses ship. When the character stops piloting the ship collision is turned back on, it is unhidden, detatched, and I use SetActorLocation to place the character precisely at the steering wheel of the ship.

The problem is that any movement the ship makes seems to doubly affect the character.
To pilot the ship you need to be standing in a overlap box near the steering wheel, which usually means you are standing on the ship. If the character is not standing on the ship when initially piloting there is no problem (e.g. jumping in the air and starting it while still airborne). If you were standing on the ship when you started piloting every movement the ship makes seems to be repeated on the character after the actor location is set.

For example if I drive the ship 10m forward the character appears 10m in front of the ship, or 20m ahead of where they started. If I turn the ship 90 degrees the character appears a further 90 degrees.

I checked the location that was being passed to the SetActorLocation and it is correct, so my guess is that something on the character movement component, or maybe the physics, is correcting its position after the SetActorLocation.

Can someone explain what is happening here? How do I put my character where I want it and keep it there, and why is it moving away in the first place?

Also, is this a good method for having the character pilot the ship? Are there better methods? Should I just destroy the character and create a new one every time? That seems like it could be tedious if the character carries a lot of information.

I am new to a lot of things in Unreal, but I suspect maybe the transformations are getting doubled on your character because as I understand it (hopefully this is correct),

When you make an Actor be a Component of another Actor, it is going to move with that master actor unless you specifically design it NOT to. And it won’t alter its own location and rotation values. A component with 0,0,0 location and 0,0,0 rotation will remain at those values no matter what its parent actor is doing, and any changes to those values on the Component are considered relative to the “parent” actor.

So I think that you will get the results you want if you remove the SetActorLocation function call altogether, because then it’s adding transformations relative to the component’s already-moving-with-the-vehicle stuff.

Alternately, you could NOT make the character a component of the vehicle, and just use SetActorLocation to keep him matched to the vehicle’s position.

So I’m not totally sure on this, but I made a test project where the player controls a turret mounted on a spaceship that’s doing barrel rolls and loop-the-loops, and the rotation values on the player controlled component seemed to only be aware of their orientation in relation to the spaceship, unless I specifically told them to base it on world rotation. How truly this applies to your situation will of course depend on how I set the Blueprints up for that project.