Physics unexpectedly stop calculating

I’m making some airplane stuff, and right now I am working on the ejection sequence which (irl) works as follows: the canopy of the aircraft is jettisoned, and a fraction of a second later, the pilot’s seat fires its rocket motors and separates from the aircraft.

The issue is that the pilot seat only moves up and away from the aircraft for a brief moment before it freezes in the air; physics just stop calculating. In the video you can see that the canopy, which was jettisoned in a similar manner just a second prior is behaving normally, it continues to move forward due to inertia, whereas the pilot seat floats in the air. In the output window, it’s showing the network ownership of the canopy and the pilot seat, they’re both set to the player (dw about the name). This is really strange for me because the way the weld constraints are disabled (disabled on a server side script) and the way the forces are applied are nearly identical for the canopy and the seat.
I’m fairly confident that it’s something to do with the fact that it has something to do with the fact that the seat is welded to the player’s character, the AssemblyRootPart of the seat is the character’s HumanoidRootPart. However, even when the character leaves the seat, despite the character getting launched forward due to the inertia from when the seat initally ejected, the seat still stays still in the air.
How do I get around this?

Also, I’m somewhat confident that it’s not an issue in my code because I’ve used the same code for other things, not just the canopy. For example: deployable ordnances on the plane’s wings. (There’s nothing going wrong in this video, I’m just showing that my approach does work for other objects, just not the seat apparently)

It turns out that this is actually two separate issues. The seat being stuck while the character is being in it is one thing, while the seat being stuck when the player is not on it is another. I figured out the latter first, the mistake I had made was that I used the seat:Sit(humanoid) function on the client when it should really only be used on the server. This allowed physics to resume being simulated after the character leaves the seat.
As for the seat being stuck while the character is in it, I’m not sure what the cause is, perhaps it has to do with the fact that the seat had previously been part of the aircraft’s assembly, this is only a guess. However I did find the solution, which was to make the player leave the seat and force the player back in immediately after. And from there another problem arises, there is a noticeable cooldown before a character can re-enter the same seat object, so I had to put wait() in there. It kinda sucked, and it made it so that the character interferes with the seat physics in the mean time, causing unwanted rotation of the seat during ejection, and also played a goofy animation when the player re-enters the seat. The solution to that was: to put the character on a separate seat upon ejection. It’s a pretty nasty solution on paper, but in practice it looks seamless.

me when tacobell

HOW IT WORKS: Aircraft Ejection Seats (720p) on Make a GIF

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.