I made an orbital camera controller for someone who wanted help on the Godot Discord channel. Here’s the source. When applied to a Camera Node it gives this kind of behavior:
The player controller is fairly straightforward, so I’ve not included it as a separate gist. For a Kinematic Player, one can move relative to the camera direction like so:
extends KinematicBody
export var walk_speed:float = 5.0
func _process(delta):
# Walking in the direction the camera is pointing.
var camera = get_viewport().get_camera()
var dy = int(Input.is_action_pressed("move_forward")) - int(Input.is_action_pressed("move_backward"))
var dx = int(Input.is_action_pressed("move_left")) - int(Input.is_action_pressed("move_right"))
var move = (camera.global_transform.basis.x * -dx) + (camera.global_transform.basis.z * -dy)
move = Vector3(move.x, 0, move.z).normalized() # Take out the 'looking down' component.
self.move_and_slide(move*walk_speed)