You could use the physics engine, in combination with ray casts. Doing the whole thing custom would give you more control though. In either case, the Camera should be free-floating, on the same layer as the player, not a child. You can have another node (could be a Position3D, or something else invisible). This will be an invisible node that could be a child of the player. This will make it easier to get the radius/sphere movement. The position holds the ideal position (could be directly in back of the player 2 meters, or whatever) and can be also rotated with the controller. The camera then tries to follow the invisible position, assuming it does not clip a wall. The camera could be a physics body, so it collides with static bodies. Or you can simply shoot out like 4 to 6 rays at varying angles, and then move the camera away from the wall if it hits. This is at least the basic idea, it can get more complex with edge cases, but that is the idea.