Check out our latest project ✨ OpenChapter.io: free ebooks the way its meant to be 📖

StairsCharacter3D

An asset by mrjshzk
The page banner background of a mountain and forest
StairsCharacter3D hero image

Quick Information

0 ratings
StairsCharacter3D icon image
mrjshzk
StairsCharacter3D

A simple class based on Godot's default CharacterBody3D with very simple stair stepping ability. Just call "move_and_stair_step()" instead of "move_and_slide()".Written in C++Only tested with cylinder colliders. Works best with "0.01" collider margin.There are a couple signals you can connect to: on_stair_step (any step, up or down) on_stair_step_down on_stair_step_up

Supported Engine Version
4.4
Version String
1.0.0
License Version
MIT
Support Level
community
Modified Date
10 months ago
Git URL
Issue URL

Stairs Character 3D

A simple class based on Godot's default CharacterBody3D with very simple stair stepping ability. Just call "move_and_stair_step()" instead of "move_and_slide()".

Only tested with cylinder colliders. Works best with "0.01" collider margin.

There are a couple signals you can connect to:

  • on_stair_step (any step, up or down)
  • on_stair_step_down
  • on_stair_step_up

Example usage:


extends StairsCharacter3D


const SPEED = 5.0
const JUMP_VELOCITY = 4.5

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


func _physics_process(delta: float) -> void:
    # 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

    # 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)
    
    # call move_and_stair_step instead of default move_and_slide
    move_and_stair_step()

Note

This plugin is basically just Andricraft's GDScript Stairs Character translated into C++. I made it as a learning exercise for GDExtension.

A simple class based on Godot's default CharacterBody3D with very simple stair stepping ability. Just call "move_and_stair_step()" instead of "move_and_slide()".

Written in C++

Only tested with cylinder colliders. Works best with "0.01" collider margin.

There are a couple signals you can connect to:

on_stair_step (any step, up or down)
on_stair_step_down
on_stair_step_up

Reviews

0 ratings

Your Rating

Headline must be at least 3 characters but not more than 50
Review must be at least 5 characters but not more than 500
Please sign in to add a review

Quick Information

0 ratings
StairsCharacter3D icon image
mrjshzk
StairsCharacter3D

A simple class based on Godot's default CharacterBody3D with very simple stair stepping ability. Just call "move_and_stair_step()" instead of "move_and_slide()".Written in C++Only tested with cylinder colliders. Works best with "0.01" collider margin.There are a couple signals you can connect to: on_stair_step (any step, up or down) on_stair_step_down on_stair_step_up

Supported Engine Version
4.4
Version String
1.0.0
License Version
MIT
Support Level
community
Modified Date
10 months ago
Git URL
Issue URL

Open Source

Released under the AGPLv3 license

Plug and Play

Browse assets directly from Godot

Community Driven

Created by developers for developers