- Home /
Controller Movement!!
I want my character to move in X axis when Horizontal Input is received!!
And, move in Z axis when Vertical movement is received!!
But, not both at the same time!!
using UnityEngine; using System.Collections;
public class PlayerMovement : MonoBehaviour
{
public float speed = 6.0F;
public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.zero;
//For run speed = 2, for walk speed set to 0.5
void Update()
{
//Set jump or run mode!! Shift makes us run!!
if(Input.GetKey (KeyCode.LeftShift))
speed = 2f;
else
speed = 0.5f;
CharacterController controller = GetComponent<CharacterController>();
if (controller.isGrounded)
{
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton("Jump"))
moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}
}
I am using the example code from the scripting reference of the controller!!
I dont seem to get the controller move only in one direction at a time! The script makes the character run diagonally too i.e. X and Z axis at the same time!!
I want to remove diagonal movement and force movement either in X axis or in Z axis! But, never in both axis at the same time!!
Answer by robertbu · Dec 16, 2013 at 04:40 PM
If you make one dominate (horizontal or vertical), then it is easy. If you want the last key pressed, it is much more difficult. For the easy solution, replace this line:
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
with:
Vector3 horz = Input.GetAxis("Horizontal");
Vector3 vert = Input.GetAxis("Vertical");
if (horz > 0) {
moveDirection = new Vector3(horz, 0, 0);
}
else {
moveDirection = new Vector3(0, 0, vert);
}
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Character controller movement 1 Answer
Xbox Controller & input manager? 1 Answer
Return Proper Velocity of Player object 3 Answers
A simple solution for constant rigidbody movement without changing and clamping velocity directly 2 Answers