使用阻尼移动相机时,相机或其他不移动的物体看起来不像瞬移。当相机静止时,玩家看起来不像瞬移。当摄像机跟随玩家而没有阻尼时,玩家看起来不像瞬移。但是当相机设置为跟随玩家并带有阻尼时,玩家看起来就像传送一样(其他不移动的物体仍然显示正常)。
相机编码
func _process(delta):
#Smooth transition
var to = character.position + origin
camPosWoutOffset = smoothTo(camPosWoutOffset, to, smoothness, delta)
#offset added to smoothed position
self.global_transform.origin = Vector3(camPosWoutOffset.x + offset.x,
origin.y + offset.y, camPosWoutOffset.z + offset.z)
func smoothTo(from: Vector3, to: Vector3, smoothness: float, delta: float) -> Vector3:
var output = Vector3(damp(from.x, to.x, smoothness, delta),
to.y, damp(from.z, to.z, smoothness, delta))
return output
func damp(source: float, target: float, smoothing: float, delta: float) -> float:
return lerp(source, target, 1 - pow(smoothing, delta))
播放器处的代码
accel = axis * 150 * delta
velocity += accel
velocity = velocity.limit_length(MaxSpeed)
move_and_slide()
外观如何: https://youtu.be/s1cYYLDoNk8 https://www.youtube.com/watch?v=s1cYYLDoNk8
我尝试过带或不带“增量时间”的 lerp、slerp,但都有问题。
应该写“_physical_process(delta):”而不是“_process(delta):”修复它。