- Home /
 
Walk to camera direction
Hi, I am making a animated FPS controller. But when i turn the body of the character and then start to move it still goes towards the standard X and Z directions. so the problem is that when i turn the camera, the character turns with it but it still moves in the standard directions. Does anyone know any solutions? Thanks already.
This is my camera scirpt:
 public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
 public RotationAxes axes = RotationAxes.MouseXAndY;
 public float sensitivityX = 15F;
 public float sensitivityY = 15F;
 public float minimumX = -360F;
 public float maximumX = 360F;
 public float minimumY = -60F;
 public float maximumY = 60F;
 float rotationX = 0F;
 float rotationY = 0F;
 Quaternion originalRotation;
 void Update()
 {
     if (axes == RotationAxes.MouseXAndY)
     {
         // Read the mouse input axis
         rotationX += Input.GetAxis("Mouse X") * sensitivityX;
         rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
         rotationX = ClampAngle(rotationX, minimumX, maximumX);
         rotationY = ClampAngle(rotationY, minimumY, maximumY);
         Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
         Quaternion yQuaternion = Quaternion.AngleAxis(rotationY, -Vector3.right);
         transform.localRotation = originalRotation * xQuaternion * yQuaternion;
     }
     else if (axes == RotationAxes.MouseX)
     {
         rotationX += Input.GetAxis("Mouse X") * sensitivityX;
         rotationX = ClampAngle(rotationX, minimumX, maximumX);
         Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
         transform.localRotation = originalRotation * xQuaternion;
     }
     else
     {
         rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
         rotationY = ClampAngle(rotationY, minimumY, maximumY);
         Quaternion yQuaternion = Quaternion.AngleAxis(-rotationY, Vector3.right);
         transform.localRotation = originalRotation * yQuaternion;
     }
 }
 void Start()
 {
     // Make the rigid body not change rotation
     if (GetComponent<Rigidbody>())
         GetComponent<Rigidbody>().freezeRotation = true;
     originalRotation = transform.localRotation;
 }
 public static float ClampAngle(float angle, float min, float max)
 {
     if (angle  < -360F)
      angle += 360F;
     if (angle  > 360F)
      angle -= 360F;
     return Mathf.Clamp(angle, min, max);
 }
 
               And this is my controller script:
 public Animator anim;
 public Rigidbody Rbody;
 public float Gravity;
 public float JumpHeight;
 private float currentrunspeed = 80;
 private bool run;
 //public GameObject Camera;
 public GameObject us;
      
 private float inputH;
 private float inputV;
 private float inputJump;
 // Use this for initialization
 void Start ()
 {
     anim = GetComponent<Animator>();
     Rbody = GetComponent<Rigidbody>();
     run = false;
     Cursor.lockState = CursorLockMode.Locked;
 }
 
 // Update is called once per frame
 void Update ()
 {
     transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, Camera.main.transform.localEulerAngles.y, transform.localEulerAngles.z);
     Physics.gravity = new Vector3(0f, -Gravity * Time.fixedDeltaTime, 0f);
     
     if (Input.GetKeyDown("1"))
     {
         anim.Play("Run", -1,0f);
     }
     if (Input.GetKey(KeyCode.LeftShift)&& inputV > 0.1)
     {
         currentrunspeed = 150f;
         run = true;                        
     }
     else
     {
         run = false;
         currentrunspeed = 80f;      
     }
     inputH = Input.GetAxis("Horizontal");
     inputV = Input.GetAxis("Vertical");
     anim.SetFloat("InputH", inputH);
     anim.SetFloat("InputV", inputV);
     anim.SetBool("Run",run);
    float moveX = inputH * 50f * Time.deltaTime;
    float moveZ = inputV * currentrunspeed * Time.deltaTime;
     
    
 Rbody.velocity = new Vector3(moveX,Rbody.velocity.y, moveZ);
    if (Input.GetKeyDown("space") && IsGrounded)
    {
         Rbody.AddForce(Vector3.up * JumpHeight * Time.deltaTime);
         anim.SetBool("Jump", true);
         
    }
    else
     {
         anim.SetBool("Jump", false);
     }
 }
 public bool IsGrounded;
 void OnCollisionStay(Collision collisionInfo)
 {
     IsGrounded = true;
 }
 void OnCollisionExit(Collision collisionInfo)
 {
     IsGrounded = false;
 }
 
              
               Comment
              
 
               
              Your answer
 
             Follow this Question
Related Questions
Player look in camera direction problem 1 Answer
How can I respawn my RigidBodyFPSController facing new direction? 0 Answers
Make the player go into the direction I am looking at 0 Answers
How to Get My Camera to Follow First Person POV in First Person Controller 1 Answer
First person controller movement direction incorrect 2 Answers