Thanks for your comments, yes, we use something similar to SurfaceEffector2D, but it is slightly modified to work with our player controller.