How to move a pawn along a plane with custom coordinates?

Hello, I am currently having issues trying to move my pawn in directions relative to an imaginary plane. The purpose of this is to allow the pawn to travel on walls or other surfaces. I currently have it partially working where I use a normalized vector that acts like the direction of gravity for the pawn. This works somewhat well as when the pawn switches onto another surface, such as a wall, it can move and jump along that surface. The issue I’m getting into is that the pawn will move in the opposite direction to the keyboard/controller inputs when on any surface except for 90 degrees and 0 degrees. I tried looking into making a custom plane where I can have my relative X, Y, and Z move with the plane, but I can’t seem to wrap my head around how getting a plane to work with X,Y,Z, and W inputs, or if there is another way of getting this effect done.

This is a picture on what I am trying to accomplish. It is 3 vectors along a plane where its normal direction is a custom gravity vector, so I can get the direction and rotation of them to move the pawn in any way. The Rotation of the plane is that the relative X direction is the direction of the camera to the pawn, along the surface of the plane.

What I have so far is that the pawn moves along 3 custom directions depending on the camera angle and the custom gravity direction (yellow arrow in image below)

For some reason, Once I change the direction of gravity to a wall by updating the vector variable, my relative direction vectors flip around and don’t work as well.

Is there any documentation or blueprint examples on vector transformations, or creating a plane (I don’t fully understand quaternions and don’t know how to create a plane using the X,Y,Z and W coordinates.)