i just read the edit, but it's not clear yet.
how did you define the player movement? Is the forward Vector3(0,0,1) in world space or player space?
If it is in player space, simply rotate the player so that the new "up" is now the collision normal ( https://kidscancode.org/godot_recipes/3d/3d_align_surface/ in your case, new_y
is the collision_normal result)
player.transform.basis.y = collision_normal
player.transform.basis.x = -player.tranform.basis.z.cross(collision_normal)
player.transform.basis = player.transform.basis.orthonormalized()
After rotated, the forward vector remains the same
If it is in world space, the player does not rotate, but the forward/backward/up/down/left/right (let's call them direction vectors) need to be changed to a new vector set that is oriented on the collision_normal.
If your level is designed with multiple separated and straight wall, the collision normal is equivalent to one of the wall's transform.basis (the one perpendicular to the flat exposed surface), so you can use the basis itself to define the direction vectors (this is what i assumed in my first answer)
Otherwise you can have a transform approach, creating your own direction_transform
, and rotate it on the collision direction (similarly as above). After that, the forward/backward input are simply
forward=direction_transform.basis.z
backward=-direction_transform.basis.z
left=direction_transform.basis.x
etc.