From ba89eac5834d46b16facd1416afe3bd8f49d5c41 Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Sat, 11 Nov 2023 04:26:56 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B8=E6=9C=BA=20lerp=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/character/move.gd | 2 +- script/manager/camera_manager.gd | 34 +++++++++++++++++--------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/script/character/move.gd b/script/character/move.gd index 71b511c..832e9b1 100644 --- a/script/character/move.gd +++ b/script/character/move.gd @@ -7,7 +7,7 @@ class_name Move var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") -func _physics_process(delta): +func _process(delta): if status.is_pause:return var is_hit_floor = update_on_floor(delta) update_speed_y(delta) diff --git a/script/manager/camera_manager.gd b/script/manager/camera_manager.gd index ab69032..1520926 100644 --- a/script/manager/camera_manager.gd +++ b/script/manager/camera_manager.gd @@ -2,10 +2,11 @@ extends Camera3D class_name CameraManager var target:int -var target_pos:Vector3 = Vector3.ZERO -var target_pos_now:Vector3 = Vector3.ZERO -var offset:Vector3 = Vector3(0,1,1) * 5 +var target_pos:Vector2 = Vector2.ZERO +var target_pos_y:float +var target_pos_now:Vector2 = Vector2.ZERO var level_size:Vector2 +var offset:float = 5 var camera_limit = Vector3(6.4,1.04,3.76) #x,up,z-downd func _ready(): @@ -17,17 +18,21 @@ func _ready(): SignalManager.level_size_change.connect(on_level_size_change) SignalManager.level_loading_end.connect(on_level_loading_end) -func _physics_process(delta): +func _process(delta): target_pos_lerp(0,delta,5) target_pos_lerp(1,delta,5) - target_pos_lerp(2,delta,15) - position = target_pos_now + offset + position.x = target_pos_now.x + position.z = target_pos_now.y + offset + position.y = offset func target_pos_lerp(index:int,delta:float,delta_scale:float): - if abs(target_pos_now[index] - target_pos[index]) < Setting.pixel_size: + var diff = abs(target_pos_now[index] - target_pos[index]) + if diff < Setting.pixel_size: target_pos_now[index] = Util.snap_float(target_pos[index]) else: - target_pos_now[index] = lerp(target_pos_now[index], target_pos[index], delta * delta_scale) + var weight_min = Setting.pixel_size / 2 / diff + var weight = max(delta * delta_scale,weight_min) + target_pos_now[index] = lerp(target_pos_now[index], target_pos[index], weight) func on_character_create(id:int,team:Enum.ETeam,pos:Vector3): if team == Enum.ETeam.Player: @@ -39,19 +44,16 @@ func on_character_create(id:int,team:Enum.ETeam,pos:Vector3): func on_character_pos_changed(id:int,pos:Vector3): if id == target: target_pos.x = clamp(pos.x,camera_limit.x,level_size.x-camera_limit.x) - target_pos.z = clamp(pos.z,camera_limit.y,level_size.y-camera_limit.z) + target_pos.y = clamp(pos.z-target_pos_y,camera_limit.y,level_size.y-camera_limit.z) func on_character_hit_floor(id:int,pos:Vector3): if id == target: - target_pos.y = pos.y + target_pos_y = pos.y + target_pos.y = clamp(pos.z-target_pos_y,camera_limit.y,level_size.y-camera_limit.z) -func on_character_destroy(id:int): - target = 0 - -func on_level_size_change(size:Vector2): - level_size = size +func on_character_destroy(id:int):target = 0 +func on_level_size_change(size:Vector2):level_size = size func on_level_loading_end(): target_pos_now.x = target_pos.x target_pos_now.y = target_pos.y - target_pos_now.z = target_pos.z