My plane flies using a flight model built on Unreal 5's Physics system. A sphere is set as the root component and has physics enabled. The rest of the plane is not simply parented to the root and has collision enabled. On every tick I calculate and apply a variety of forces meant to strike a balance between realism and ease to control.
First the forward speed of the plane and it's angle of attack are stored for use with my calculations. (for more accurate flight model, adjusted air speed could be used but I felt it was unnecessary for my application)
Lift strength is then calculated by using a simplified lift equation (instead of L = (1/2) * ρ * v² * S * Cl, I use L = v² * S * Cl where S is our Angle of Attack instead of active wing surface area.
Here I calculate overall flight forces by calculating forward thrust, adding lift and scaling both by the maximum altitude I want available to the player (this far simplifies the math compared to simulating air density.)
Finally, I set a scalar value based on the current velocity to dictate the efficacy of control surfaces.
After all these forces are collated into a vector, they are added to the plane every tick.
Throttle is set on a range from 0-1, this value is then multiplied against a curve that gives more accurate throttle response, then multiplied by the maximum throttle force we allow.
Yaw, Pitch, and Roll are directly applied based on the length of applied input. They are scaled based on the planes' forward velocity to simulate the efficacy of control surfaces at speed.
This function is called whenever player input ends to counteract some of the rotational forces added. Making recovery from extreme turns much easier.
When the player drops a bomb the linear velocity of the plane is added to the bomb for realistic aim