!st person object only moving in global coordinates

See the line where you construct your move vector?

Those transform.right / transform.forward shortcuts refer to where this script is.

Instead, use the controller reference instead, as in controller.transform.right.

Also, if you would prefer something more full-featured here is a super-basic starter prototype FPS based on Character Controller (BasicFPCC):

That one has run, walk, jump, slide, crouch… it’s crazy-nutty!!