1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
extends Camera3D @export var follow_this: Node3D @export var target_distance = 3.0 @export var target_height = 2.0 var last_lookat func _ready(): last_lookat = follow_this.global_transform.origin func _physics_process(delta): var delta_v = global_transform.origin - follow_this.global_transform.origin var target_pos = global_transform.origin # ignore y delta_v.y = 0.0 if (delta_v.length() > target_distance): delta_v = delta_v.normalized() * target_distance delta_v.y = target_height target_pos = follow_this.global_transform.origin + delta_v else: target_pos.y = follow_this.global_transform.origin.y + target_height global_transform.origin = global_transform.origin.lerp(target_pos, delta * 20.0) last_lookat = last_lookat.lerp(follow_this.global_transform.origin, delta * 20.0) look_at(last_lookat, Vector3(0.0, 1.0, 0.0))