[Godot 2] Problems with a first-person flying code
I'm trying to make a simple flying camera for a 3D map editor app (as simple as I can make it). It moves as expected of a FP camera, except that forward/backward moves it toward/away from where it's facing. The code I have was taken from Gokudomatic's eco-fps-controller code (from the AssetLib). I took the
It has several problems though, as far as my goal goes. One of them is that it uses the acceleration factor as the friction factor as well. I need to be able to tweak both separately, so I have around medium acceleration and very high friction, for snappy controls (to allow for small taps that move you only by a few inches, while continuous key press still gets you to top speed quickly).
Another problem is that if I use a zero'd
Vector3() for the
linear_interpolate() function (as the original code uses), it doesn't even transition between speeds. It accelerates to top speed and stops instantly. If I use the
velocity vector (as I saw in Jeremy Bullock's youtube videos), it kinda works with very high
accel (above 5 or 6), but with low
accel it just glides after releasing the keys, and on top of that it doesn't move toward the facing direction unless I'm pressing the keys.
Yet another problem (when using the zero vector for lerping) is that changing the
accel value, changes the top speed. Lower accel makes it slower, and vice-versa.
extends KinematicBody var FLY_SPEED = 10 var FLY_ACCEL = 0.5 # # (...) # func fly(delta): # var aim = camera.get_global_transform().basis # seems to make no difference which of these I use var aim = camera.get_camera_transform().basis # var dir = Vector3() # if Input.is_key_pressed(KEY_W): dir -= aim if Input.is_key_pressed(KEY_S): dir += aim if Input.is_key_pressed(KEY_A): dir -= aim if Input.is_key_pressed(KEY_D): dir += aim # dir = dir.normalized() # var target = dir*FLY_SPEED #velocity = Vector3().linear_interpolate( target, FLY_ACCEL*delta ) velocity = velocity.linear_interpolate( target, FLY_ACCEL*delta ) # move(velocity)
I'd like it if someone could help me integrate friction into this, separate from acceleration, and also to understand how to make it work properly.