- Home /
Make a player only move in one direction
Hello!
I am trying to create a game where the player can only move in the direction it is facing, but the following code allows the player to move in all 4 directions. (This is for a 3D project)
Any help would be appreciated! Thanks!
public class PlayerController : MonoBehaviour {
public float speed;
private Rigidbody rb;
void Start() {
rb = GetComponent<Rigidbody>();
}
void FixedUpdate() {
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rb.AddForce(movement * speed);
}
}
Answer by ScaniX · Dec 22, 2017 at 10:50 AM
From looking at your code, you seem to move the player independent of the direction you are looking in.
public class PlayerController : MonoBehaviour {
public float speed;
private Rigidbody rb;
private Transform tfCam;
void Start() {
rb = GetComponent<Rigidbody>();
tfCam = Camera.main.transform; // get transform of main camera (the player's view)
}
void FixedUpdate() {
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
if (moveVertical > 0) { // only forward, not backwards (was this your intention?)
Vector3 direction = new Vector3(tfCam.forward * moveVertical, 0, tfCam.right * moveHorizontal);
rb.AddForce(direction * speed);
}
}
}
This is untested code and a simplification of what a final movement script would probably do, but I think something like this would work.
Your answer
Follow this Question
Related Questions
(RigidBody) Velocity at an Angle 0 Answers
Why is my character controller moving in unrelated directions? 1 Answer
Player getting stuck in ground (3D) player has Rigidbody, and Box Collider, world is Mesh Colliders 0 Answers
Player not affected by moving platform? 0 Answers
Moving a non-player object in a random direction which bounces off other objects. 2 Answers