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