- Home /
Why does WASD move my player quicker than with a joystick?
For some reason, if you use a keyboard to move my player it's faster than a joystick. Can anyone help me? Here's my code:
#pragma strict
var moveSpeed : float;
var clampRadius : float;
var dashSpeed : float;
var walkSpeed : float;
var horizontalDirection : int;
var verticalDirection : int;
var rb2D : Rigidbody2D;
var movement : Vector2;
function Update () {
movement.x = Input.GetAxis("Horizontal");
movement.y = Input.GetAxis("Vertical");
}
function FixedUpdate () {
//move
rb2D.MovePosition(rb2D.position + movement * moveSpeed * Time.fixedDeltaTime);
movement = Vector3.ClampMagnitude(movement, clampRadius);
//dash
if(Input.GetKeyDown(KeyCode.Space) == true) {
rb2D.MovePosition(rb2D.position + movement * dashSpeed * Time.fixedDeltaTime);
}
//walk
if(Input.GetKey(KeyCode.LeftShift) == true && !Input.GetKeyDown(KeyCode.Space) == true) {
rb2D.MovePosition(rb2D.position + movement * walkSpeed * Time.fixedDeltaTime);
}
}
Answer by awsapps · Jun 20, 2021 at 12:40 PM
In fact, the sensivity of the WASD and the joycon are different.
You can tweak them in : Edit -> Project Settings -> Input Manager.
Inside the Axes drop down, you would find two Horizontal and two Vertical input configurations, one for the WASD and another for the joystick respectively (Type field).
Play with the Dead and Sensivity to adjust them.
Another way (only code) would be to normalize the Input.GetAxis to a fixed value, that would give you a fully control over the speed of the gameObject: if the value is a "large" positive then movement.x = 1, if is a large negative then -1, else, movement.x = 0, etc.
Thanks! After changing the sensitivity to 1 on both axes i was able to make progress!
Here's what I currently have:
#pragma strict
var originalMoveSpeed : float;
var moveSpeed : float;
var clampRadius : float;
var walkSpeed : float;
var rb2D : Rigidbody2D;
var movement : Vector2;
function Update () {
movement.x = Input.GetAxisRaw("Horizontal");
movement.y = Input.GetAxisRaw("Vertical");
}
function FixedUpdate () {
//normalize movement
if (movement.magnitude > 1) {
movement = movement.normalized;
}
//move
rb2D.MovePosition(rb2D.position + movement * moveSpeed * Time.fixedDeltaTime);
movement = Vector3.ClampMagnitude(movement, clampRadius);
//walk
if(Input.GetKey(KeyCode.LeftShift) == true && !Input.GetKeyDown(KeyCode.Space) == true) {
moveSpeed = walkSpeed;
}
else {
moveSpeed = originalMoveSpeed;
}
}
Your answer
Follow this Question
Related Questions
Ball Rolling Forever 0 Answers
Why am I only allowed to trigger my dash script once? 2 Answers
How would I go about keeping my player object moving after a scene change? 3 Answers
Cannot remove sprite using destroy 1 Answer
Can Any Body Help me how to setup jenkins with unity3d 5.3.4 for automatic builds???? 0 Answers