- 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
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                