# Help with reading a CharacterBody2D's velocity

4.2.1

### Question

I’m trying to access a CharacterBody2D’s velocity in a “Tracker” nodes script. I’m attempting to make the Tracker node match the position of the character body, but then offset it by the character body’s velocity.

For some reason, the character body’s velocity is always (0,0).

Here’s the code for thew character body…

``````@tool
extends CharacterBody2D

set(v):
queue_redraw()

var drag: Vector2 = Vector2(0.1, 0.2);
var vel: = Vector2(100, -1000);
var speed: = 3.0;
var gravity: = 198.0
var frame_count = 0;
var has_started = false

func _draw():

# I'm using the Godot State Charts add-on
func _on_play_state_physics_processing(delta):
if !Engine.is_editor_hint():
vel.y += (gravity * speed) * delta
vel -= drag if vel.length() > 0 else Vector2.ZERO
var collision = move_and_collide(vel*delta)
if collision:
if (collision.get_collider() as Node2D).is_in_group('world_collider'):
vel = vel.bounce(collision.get_normal())
queue_redraw()

``````

and here’s the code for the Tracker node

``````extends Node2D
@export var debug: bool = false
@export var body: CharacterBody2D

# Called when the node enters the scene tree for the first time.
pass # Replace with function body.

func _draw():
if(debug):
draw_circle(Vector2.ZERO, 20, Color.RED)

# set the node's position to the body's position
# offset the node's position by the body's velocity
func _physics_process(_delta):
position = body.position
position += body.velocity
``````

I assumed move_and_collide was setting the velocity, but I guess I must be wrong about that. Any help greatly appreciated.

Also, I’m newish to Godot and GDScript, so I’d also welcome any advice if you see anything strange in the way I’m trying to code this.

`CharacterBody2D.velocity` is used for `CharacterBody2D.move_and_slide()` if you don’t use the variable and the function then it will always be `0, 0`

I think that you’d need to use the `vel` variable you use.

1 Like