0 votes

Hello guys I am trying to figure out how I would be able to make a character "fly" so that in such where my mouse/camera view is pointed my player will fly that direction if I am pressing the "W" key. All I've been able to do so far is make sure gravity doesn't affect my player while I press flight.

Here`s my script:

extends KinematicBody

var verticalvelocity = 0
var gravity = 50
var direction = Vector3.FORWARD
var velocity = Vector3.ZERO
var strafe
dir = Vector3.ZERO

var jump_magnitude = 18

var fligth_magnitude = 9
var Fly = 10

var movementspeed = 0
var walk
speed = 3
var runspeed = 12
var acceleration = 7
var angular
acceleration = 7
var superspeed = 50
var speed
increase_increment = 1

func physicsprocess(delta):
if Input.isactionpressed("Forward") || Input.isactionpressed("Backward") || Input.isactionpressed("Left") || Input.isactionpressed("Right"):

    var h_rot = $Camroot/h.global_transform.basis.get_euler().y 

    direction = Vector3(Input.get_action_strength("Left") - Input.get_action_strength("Right"),
                Input.get_action_strength("Forward") - Input.get_action_strength("Backward")).rotated(Vector3.UP,h_rot).normalized()

    if Input.is_action_pressed("Sprint"):
        movement_speed = run_speed
        $AnimationTree.set("parameters/iwr_blend/blend_amount", lerp($AnimationTree.get("parameters/iwr_blend/blend_amount"), 1 , delta * acceleration))
        $AnimationTree.set("parameters/iwr_blend/blend_amount", lerp($AnimationTree.get("parameters/iwr_blend/blend_amount"), 0 , delta * acceleration))
        movement_speed = walk_speed
else :
    $AnimationTree.set("parameters/iwr_blend/blend_amount", lerp($AnimationTree.get("parameters/iwr_blend/blend_amount"), -1 , delta * acceleration))
    movement_speed = 0

# faz com que o botão que foi pressionado ative uma ação e se for pressionado de novo desativa a ação
if Input.is_action_just_pressed("E"):
    if run_speed == super_speed:
        run_speed = 12
    else :
        run_speed = super_speed

if is_on_floor():
    if Input.is_action_pressed("Jump"):
        vertical_velocity = jump_magnitude

if Input.is_action_just_pressed("Flight"):
    if gravity == 0:
        gravity = 50
        vertical_velocity = 0

        gravity = 0
        vertical_velocity = delta * gravity 

velocity = lerp(velocity,direction * movement_speed, delta * acceleration)

move_and_slide(velocity + Vector3.UP * vertical_velocity,Vector3.UP)

if !is_on_floor():
    vertical_velocity -= gravity * delta 
    vertical_velocity = 0

$SimplePlayerarma.rotation.y = lerp_angle($SimplePlayerarma.rotation.y,atan2(direction.x,direction.z), delta * angular_acceleration)

func speedincrease():
if $Timer.time
left == 0:
super_speed += 1

Godot version Godot Engine v3.3.2.
in Engine by (21 points)

1 Answer

0 votes

so, if you wanna make your player fly like in minecraft creativ, you just have to make a key that gives you hight and one that lets you down (space and shift for exemple). W A S D will act the same way as they would on the flor

by (191 points)

Thanks Im gonna try this

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to webmaster@godotengine.org with your username.