#I can't see my jump animation with this script, I think my idle animation is overriding it.

4 messages · Page 1 of 1 (latest)

late raptor
#

I tried changing the code to this but now the character doesn't animate at all

#
    # Get the input direction and handle the movement/deceleration.
    # As good practice, you should replace UI actions with custom gameplay actions.
    var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
    var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
    if direction:
        velocity.x = direction.x * SPEED
        velocity.z = direction.z * SPEED
    else:
        velocity.x = move_toward(velocity.x, 0, SPEED)
        velocity.z = move_toward(velocity.z, 0, SPEED)

    if not is_on_floor():
        velocity.y -= gravity * _delta
        state_machine.travel("jump")
    elif velocity != Vector3.ZERO:
            if state_machine.get_current_node() != "jump":
                state_machine.travel("walk")
            else:
                    if state_machine.get_current_node() != "jump":
                        state_machine.travel("idle")
late raptor
#

@gloomy pecan blocked me because I followed up with them. Now I'm bummed.

late raptor
#

Here's what I tried now, my character walks in the air now, I don't see the jump animation:

#original code

extends CharacterBody3D


const SPEED = 5.0
const JUMP_VELOCITY = 4.5


# Code for calling animations from the animation tree
@onready var state_machine = $AnimationTree.get("parameters/playback")

# Get the gravity from the project settings to be synced with RigidBody nodes.
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")


func _physics_process(delta):
    # Add the gravity.
    if not is_on_floor():
        velocity.y -= gravity * delta

    # Handle Jump.
    if Input.is_action_just_pressed("ui_accept") and is_on_floor():
        velocity.y = JUMP_VELOCITY
        state_machine.travel("jump") # Change the state to "jump" when the player jumps

    # Get the input direction and handle the movement/deceleration.
    # As good practice, you should replace UI actions with custom gameplay actions.
    var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
    var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
    
    if direction:
        velocity.x = direction.x * SPEED
        velocity.z = direction.z * SPEED
    else:
        velocity.x = move_toward(velocity.x, 0, SPEED)
        velocity.z = move_toward(velocity.z, 0, SPEED)
        
    if velocity.is_equal_approx(Vector3.ZERO):
        state_machine.travel("idle")
    elif state_machine.get_current_node() != "jump": # Change the state to "walk" only if the player is not jumping
        state_machine.travel("walk")

    move_and_slide()