Improve camera responsiveness by following one frame ahead laterally and 20 frames ahead vertically -- the latter to improve vantage when jumping or taking springboards.
This commit is contained in:
parent
ce77112c20
commit
5ef367cac2
|
@ -5,6 +5,7 @@ class_name GameplayCamera extends Camera3D
|
||||||
@export var target_min_distance: float = 2.0
|
@export var target_min_distance: float = 2.0
|
||||||
@export var target_max_distance: float = 10.0
|
@export var target_max_distance: float = 10.0
|
||||||
@export var target_decentering_factor: float = 0.4
|
@export var target_decentering_factor: float = 0.4
|
||||||
|
@export var target_leveling_bias: float = 20.0
|
||||||
@export var follow_lerp_speed: float = 0.999
|
@export var follow_lerp_speed: float = 0.999
|
||||||
@export var turn_lerp_speed: float = 0.999
|
@export var turn_lerp_speed: float = 0.999
|
||||||
@export var fov_lerp_speed: float = 0.999
|
@export var fov_lerp_speed: float = 0.999
|
||||||
|
@ -117,8 +118,14 @@ func _follow_target(
|
||||||
if target is Character:
|
if target is Character:
|
||||||
top_speed = (target as Character).get_top_speed()
|
top_speed = (target as Character).get_top_speed()
|
||||||
var decentering: float = target_distance*target_decentering_factor
|
var decentering: float = target_distance*target_decentering_factor
|
||||||
|
var leveling := (
|
||||||
|
target_leveling_bias*velocity.project(target.global_basis.y)
|
||||||
|
)*delta
|
||||||
var target_position := (
|
var target_position := (
|
||||||
target.global_position + decentering*target.global_basis.y
|
target.global_position +
|
||||||
|
decentering*target.global_basis.y +
|
||||||
|
velocity*delta +
|
||||||
|
leveling
|
||||||
)
|
)
|
||||||
var target_offset := target_position - global_position
|
var target_offset := target_position - global_position
|
||||||
if !snap:
|
if !snap:
|
||||||
|
@ -130,7 +137,7 @@ func _follow_target(
|
||||||
))
|
))
|
||||||
if abs(_gimbal_check()) <= lerp(gimbal_margin, 1.0, 0.5):
|
if abs(_gimbal_check()) <= lerp(gimbal_margin, 1.0, 0.5):
|
||||||
var desired_basis := Basis.looking_at(
|
var desired_basis := Basis.looking_at(
|
||||||
target_offset,
|
target_offset - leveling,
|
||||||
target.global_basis.y
|
target.global_basis.y
|
||||||
)
|
)
|
||||||
global_basis = desired_basis if snap else global_basis.slerp(
|
global_basis = desired_basis if snap else global_basis.slerp(
|
||||||
|
|
Loading…
Reference in New Issue