My "quad-copter's" center of mass is exactly in the center. Why does it fly like it's center of mass isn't?

It's because of how the physics engine locks everything together when you start the simulation.

I should probably preface this with the fact that I haven't actually looked at code to verify this, but based on how machines are saved, tricks you can do to offset blocks from the grid, and the overall behavior of the game, I'm fairly certain it's accurate. At the least, it's an explanation that models what happens.

Your machines are basically saved as a bunch of blocks and their positions relative to the root block. It doesn't save what's connected to what. When you press space or click play, the game first enables physics on all of the blocks in your machine, then turns on the physics calculations; if you have more than a couple blocks or a less-than-superb computer, this can take a while, depending on what you've got running in the background.

During this time, blocks will build up momentum and torque and whatnot. Then, after this first calculation tick in the physics engine, the game goes through all your blocks and checks where the others are in relation to the attachment points: if they like up, it links them together.

The problem with this is that, depending on how long that initial startup took, your pieces might have moved a little bit since you started, and because the pieces are loaded in no particular order, they won't have all moved the same amount. For smaller contraptions, this isn't really an issue other than balance problems like what you're seeing. However, for larger machines, entire joints can break before the simulation even starts.

Again, I'm not positive on this, but it fits everything I've seen and would be a fairly simple implementation in unity. Hopefully this gives some insight on the issue.

TL;DR: Pretty sure it's just a problem with the physics engine. Turning down the time scale or enabling invincible machines should fix it.

/r/Besiege Thread