In gameplay camera, distinguish turning lerp speed from righting lerp speed. Reduce righting lerp speed.
This commit is contained in:
parent
27196f752a
commit
7314d5081a
|
@ -9,6 +9,7 @@ class_name GameplayCamera extends Camera3D
|
|||
@export var allow_losing_target := false
|
||||
@export var follow_lerp_speed: float = 0.99
|
||||
@export var turn_lerp_speed: float = 1.0
|
||||
@export var up_lerp_speed: float = 0.99
|
||||
@export var fov_lerp_speed: float = 0.999
|
||||
@export var clip_margin: float = 0.5
|
||||
@export var gimbal_margin: float = 0.75
|
||||
|
@ -22,6 +23,7 @@ class_name GameplayCamera extends Camera3D
|
|||
@export var analog_zoom_sensitivity: float = 1.0
|
||||
|
||||
var target_direction := Vector3.ZERO
|
||||
var target_up := Vector3.UP
|
||||
var look_impetus := Vector3.ZERO
|
||||
var look_velocity := Vector3.ZERO
|
||||
|
||||
|
@ -135,12 +137,12 @@ func _try_go(where: Vector3) -> void:
|
|||
func snap_to_target() -> void:
|
||||
if !target: return
|
||||
target_direction = (
|
||||
-target.global_basis.z - target.global_basis.y/2.0
|
||||
-target.global_basis.z - target_up/2.0
|
||||
).normalized()
|
||||
_follow_target(0.0, true)
|
||||
|
||||
func _gimbal_check() -> float:
|
||||
return target_direction.dot(target.global_basis.y)
|
||||
return target_direction.dot(target_up)
|
||||
|
||||
func _follow_target(
|
||||
delta: float,
|
||||
|
@ -155,11 +157,11 @@ func _follow_target(
|
|||
top_speed = (target as Character).get_top_speed()
|
||||
var decentering: float = target_distance*target_decentering_factor
|
||||
var leveling := (
|
||||
target_leveling_bias*velocity.project(target.global_basis.y)
|
||||
target_leveling_bias*velocity.project(target_up)
|
||||
)*delta
|
||||
var target_position := (
|
||||
target.global_position +
|
||||
decentering*target.global_basis.y +
|
||||
decentering*target_up +
|
||||
velocity*delta +
|
||||
leveling
|
||||
)
|
||||
|
@ -172,9 +174,13 @@ func _follow_target(
|
|||
1.0 - (1.0 - follow_lerp_speed)**delta
|
||||
))
|
||||
if !is_zero_approx(1.0 - abs(_gimbal_check())):
|
||||
target_up = target_up.slerp(
|
||||
target.global_basis.y,
|
||||
1.0 - (1.0 - up_lerp_speed)**delta
|
||||
).normalized()
|
||||
var desired_basis := Basis.looking_at(
|
||||
target_offset - leveling,
|
||||
target.global_basis.y
|
||||
target_up
|
||||
)
|
||||
global_basis = desired_basis if snap else global_basis.slerp(
|
||||
desired_basis,
|
||||
|
|
Loading…
Reference in New Issue