The default keys in the CharacterBody3D.cs script template are moving in the wrong direction

Godot Version

4.2

Question

The default keys in the CharacterBody3D.cs script template are moving in the wrong direction
I tryed to map them again in the “Project Settings → input map”
but still when pressing:
D → moving forward
A → moving back
W-> Left
S-> RIght

This is the script :

using Godot;
using System;

public partial class CharacterBody3D : Godot.CharacterBody3D
{
	public const float Speed = 5.0f;
	public const float JumpVelocity = 4.5f;

	// Get the gravity from the project settings to be synced with RigidBody nodes.
	public float gravity = ProjectSettings.GetSetting("physics/3d/default_gravity").AsSingle();

	public override void _PhysicsProcess(double delta)
	{
		Vector3 velocity = Velocity;

		// Add the gravity.
		if (!IsOnFloor())
			velocity.Y -= gravity * (float)delta;

		// Handle Jump.
		if (Input.IsActionJustPressed("ui_accept") && IsOnFloor())
			velocity.Y = JumpVelocity;

		// Get the input direction and handle the movement/deceleration.
		// As good practice, you should replace UI actions with custom gameplay actions.
		Vector2 inputDir = Input.GetVector("left", "right", "up", "down");
		Vector3 direction = (Transform.Basis * new Vector3(inputDir.X, 0, inputDir.Y)).Normalized();
		if (direction != Vector3.Zero)
		{
			velocity.X = direction.X * Speed;
			velocity.Z = direction.Z * Speed;
		}
		else
		{
			velocity.X = Mathf.MoveToward(Velocity.X, 0, Speed);
			velocity.Z = Mathf.MoveToward(Velocity.Z, 0, Speed);
		}

		Velocity = velocity;
		MoveAndSlide();
	}
}

The mapping

The scene how i expect it to work , and which it doesn’t see above

Thanks

From your second picture it looks like you rotated the camera or character body 90°

The red (x axis) is pointing towards “up”. The -z axis is considered forward in 3D for Godot.


Didnt touch them see in the pictures

That camera is still pointing in the x direction

You could also just re order your input.getvector

Thanks you ! ,
So when looking at the function:
public static Vector2 GetVector(StringName negativeX, StringName positiveX, StringName negativeY, StringName positiveY, float deadzone = -1f)

I can see i need to reorder the keys ,
So i guess the default script have bug ,
As when i created the camera/Character Body i didn’t move it or rotate it

Question :
In this line :

public float gravity = ProjectSettings.GetSetting("physics/3d/default_gravity").AsSingle();

Where does godot store or take the setting from ?
Where is : physics/3d/default_gravity ?

It is defined in your project settings (note the path, corresponding to the numbers on the screenshot):

1 Like