- Home /
Why are the A, and D input keys,both moving my character right?
So ive been trying to get this 2.5D Player controller working they way i want for a day now. Ive tried multiple methods and finaly came up with a solution for my problem getting the player to face the direction im moving, however now my player only moves right.
I think it has to do with the problematic peice of code i will highlight bellow, as when i remove it, the movement works fine, but im not sure. i will also post the full code below that just in case.
Problem code:
// Get Axis for player input
var x = Input.GetAxis("Horizontal") * Time.deltaTime * walk;
var z = Input.GetAxis("Vertical") * Time.deltaTime * walk;
transform.Rotate(0, 0, 0);
transform.Translate(0, 0, x);
//Rotate character in the direction they're moving
if (x != 0)
{
if (x > 0)
transform.forward = new Vector3(1, 0, 0);
else if (x < 0)
transform.forward = new Vector3(-1, 0, 0);
}
full code :
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour {
public float walk = .7f;
public Animation anim;
void Start ()
{
anim = GetComponent<Animation>();
}
void Update()
{
// Get Axis for player input
var x = Input.GetAxis("Horizontal") * Time.deltaTime * walk;
var z = Input.GetAxis("Vertical") * Time.deltaTime * walk;
transform.Rotate(0, 0, 0);
transform.Translate(0, 0, x);
//Rotate character in the direction they're moving
if (x != 0)
{
if (x > 0)
transform.forward = new Vector3(1, 0, 0);
else if (x < 0)
transform.forward = new Vector3(-1, 0, 0);
}
anim ["walk_normal"].speed = 2f;
if(Mathf.Abs(Input.GetAxis("Horizontal"))>0.1F)
anim.Play("walk_normal");
else
anim.Play ("idle_normal");
Thanks
Chris
Answer by NoseKills · Sep 28, 2016 at 05:00 PM
You move the transform forward x units every frame. The problem is x can be positive or negative and you also rotate the transform based on the sign of x.
So if x is 5, you set the forward vector to be 1,0,0 and move the transform to that direction times x: 5 * (1,0,0) = (5,0,0)
If x is -5 you set the forward vector to be -1,0,0 and move the transform to that direction times x: -5 * (-1,0,0) = (5,0,0)
You should disregard the sign of x when moving since the rotation of the transform already handles the direction
transform.Translate(0, 0, Mathf.Abs(x));
Your answer
![](https://koobas.hobune.stream/wayback/20220612093612im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Trying to add 45deg strafing to my Character Controller. 1 Answer
Player not responding to Jump Input 1 Answer
Unity my player does not jump 1 Answer
C# Player Movement help? 2 Answers
Why is this code glitching? 2 Answers