It’s a well known dilemma in game development that it’s tough to design movement for physics based bodies. While physics engines can be great for creating fluent, realistic animations in particular cases, it’s generally unpredictable and require a lot of knowledge and planning in order to create specific results.
In Rutch race, which is our working title this far, we wish to use physics to create realistic buoyancy and collision motions. However, because it’s a VR experience and is meant to be casual for short play sessions there are several things that may not happen that are part of real physics, like the boat flipping, not gaining speed in the right direction easily or falling off the track. Moreover, it’s crucial that steering feels really tight.
So I made a list of all the motions I wanted the boat to be able to do and thought of all the ways it should look in different scenarios and implemented a hard coded version from these requirements. I still use some physics for the buoyancy effect, but that is only applied to the visual representation of the player. This approach was an experiment, but I’m really happy with the result. Now it’s well defined how the player behaves given certain input and circumstances.