Have an issue with looking and moving Unity3D
I am following the book Unity in action and have run into an issue with some of the code. I am unsure if the author tested the code as I have the following issue:
With the scripts added separately all functions work it's only when they are added together that there is an issue.
When I look up my character automatically moves forward
When I look down my character automatically moves backwards
EDIT: If gravity is set to zero I do not move forward or back, but I do float
My Mouselook script:
public class Mouselook : MonoBehaviour { public enum RotationAxes { MouseXandY = 0, MouseX = 1, MouseY = 2 }
 public RotationAxes axes = RotationAxes.MouseXandY;
 // Use this for initialization
 void Start () {
 
 }
 public float sensitivityHor = 9.0f;
 public float sensitivityVert = 9.0f;
 public float minimumVert = -45.0f;
 public float maximumVert = 45.0f;
 private float _rotationX = 0;
 // Update is called once per frame
 void Update () {
     if(axes==RotationAxes.MouseX)
     {
         transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityHor, 0);
     }
     else if(axes==RotationAxes.MouseY)
     {
         _rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
         _rotationX = Mathf.Clamp(_rotationX, minimumVert, maximumVert);
         float rotationY = transform.localEulerAngles.y;
         transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
     }
     else
     {
         _rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
         _rotationX = Mathf.Clamp(_rotationX, minimumVert, maximumVert);
         float delta = Input.GetAxis("Mouse X") * sensitivityHor;
         float rotationY = transform.localEulerAngles.y + delta;
         transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
     }
 
 }
 
               }
My FPSInput script:
public class FPSInput : MonoBehaviour {
 public float speed = 3.0f;
 public float gravity = -3f;
 private CharacterController _charController;
 // Use this for initialization
 void Start () {
     _charController = GetComponent<CharacterController>();
 }
 
 // Update is called once per frame
 void Update () {
     float deltaX = Input.GetAxis("Horizontal") * speed;
     float deltaZ = Input.GetAxis("Vertical") * speed;
     Vector3 movement = new Vector3(deltaX, 0, deltaZ);
     movement = Vector3.ClampMagnitude(movement, speed);
     movement.y = gravity;
     movement *= Time.deltaTime;
     movement = transform.TransformDirection(movement);
     _charController.Move(movement);
 
 }
 
               }
Answer by eddoeddo · Jan 11, 2017 at 05:58 AM
move this line:
 movement.y = gravity;
 
               so its after this line:
  movement = transform.TransformDirection(movement);
 
               You don't want to transformDirection on the gravity vector
-E
Your answer
 
             Follow this Question
Related Questions
VR FPS controller dosen't work on android 1 Answer
CharacterController.Move with slow animals - they do not move 1 Answer
Controller script active on both characters. 1 Answer
I'm making a zero gravity VR game and need help with the movement. Could someone help? 0 Answers
C# FPSController crouch script 0 Answers