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();
    		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!!

Hm. It turns out that this actually only helped mask the issue. The flickering was present in deferred as well, just not as visibly. It turns out that one of my assets automatically added a special global fog image effect to the main camera which made AA apply ahead of it. I adjusted the order so that AA was last in line and the issue disappeared entirely .

Oh, Thank You very much, bro! I've been struggling with this for days... I've tried everything, literally everything. And only your solution worked. Changing Main Camera Rendering Path to "Deferred" solved my issue completely. God Bless You! Cheers!

1 Answer

1

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);
}