【问题标题】:How to make jumping smooth?如何让跳跃顺畅?
【发布时间】:2021-07-05 10:38:19
【问题描述】:
func _physics_process(delta):
    direction = Vector3.ZERO
    if !is_on_floor():
        direction -= transform.basis.y
    if Input.is_action_pressed("mf"):
        direction -= transform.basis.z
    elif Input.is_action_pressed("b"):
        direction += transform.basis.z
    if Input.is_action_pressed("JUMP") and is_on_floor():
        direction += transform.basis.y
        direction = move_and_slide(direction * 100, Vector3.UP)
    direction = direction.normalized()
    direction = move_and_slide(direction * speed, Vector3.UP)

这是我的动作。但我的角色会传送到空中并慢慢落下。如何让跳跃顺畅?

【问题讨论】:

    标签: godot gdscript


    【解决方案1】:

    你总是需要重力。对我有用的是让运动体在跳转代码之前下降。

    extends KinematicBody
    var speed=10
    var gravity = 10
    var jump_speed = 10
    var vertical_velocity = Vector3.ZERO
    var direction=Vector3.ZERO
    
    func _physics_process(delta):
        # fall
        vertical_velocity += gravity * delta * Vector3.DOWN
        vertical_velocity = move_and_slide(vertical_velocity, Vector3.UP)
    
        # jump code
        if is_on_floor() and Input.is_action_pressed("JUMP"):
            vertical_velocity = jump_speed * Vector3.UP
        
        direction=Vector3.ZERO
        if Input.is_action_pressed("mf"):
            direction-=transform.basis.z
        elif Input.is_action_pressed("b"):
            direction+=transform.basis.z
        direction = direction.normalized()
        direction = move_and_slide(direction*speed, Vector3.UP)
    

    请注意,上面的代码允许您在空中正常移动。不知道你愿不愿意。


    这里有一个版本可以在跳跃时保持方向,但不能让你在空中改变它:

    extends KinematicBody
    var speed=10
    var gravity = 10
    var jump_speed = 10
    var vertical_velocity = Vector3.ZERO
    var direction=Vector3.ZERO
    
    func _physics_process(delta):
        vertical_velocity += gravity * delta * Vector3.DOWN
        vertical_velocity = move_and_slide(vertical_velocity, Vector3.UP)
        if is_on_floor():
            if Input.is_action_pressed("JUMP"):
                vertical_velocity = jump_speed * Vector3.UP
            if Input.is_action_pressed("mf"):
                direction-=transform.basis.z
            elif Input.is_action_pressed("b"):
                direction+=transform.basis.z
            else:
                direction=Vector3.ZERO
            direction = direction.normalized()
        
        direction = move_and_slide(direction*speed, Vector3.UP)/speed
    

    请注意,此代码只会在is_on_floor() 时设置direction=Vector3.ZERO,并且没有方向输入。


    这也意味着speed 因子会累积,这就是我除以它的原因。

    我们可以在这里引入这个因素:

            direction = direction.normalized() * speed
    

    然后我们可以得到这个:

        direction = move_and_slide(direction, Vector3.UP)
    

    此时direction 的名称并不准确。因为它包含了速度。我会称它为horizontal_velocityground_velocity

    【讨论】:

      猜你喜欢
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多