Need help with 3D movement

I’m new to Unity, and pretty new to coding in general, so apologies if this is not a good place to ask this question. I’m working through exercises in the book Unity in Action and I’ve gotten stuck.

The first chapter involves building an FPS style scene. I got to the end of the chapter and when I run it, the player moves forward and backward when you move the mouse up and down, respectively. WASD and arrow keys move the player as expected and the mouse looks around like it should, aside from the movement issue.

I’ve gone back through the code and checked to make sure I didn’t put an “x” where there should have been a “y” or something. Everything is as it is in the book. I also checked the input manager for clues, but didn’t find anything, at least that I could understand.

I feel like I understand the logic reasonably well, so this is pretty frustrating. Could it be a version issue? That seems unlikely since the code would be the same regardless right? Any help would be appreciated!enter code here

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FPSInput : MonoBehaviour
{
public float speed = 6.0f;
public float gravity = -9.8f;
private CharacterController _charController;

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

}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public enum RotationAxes
    {
        MouseXAndY = 0,
        MouseX = 1,
        MouseY = 2
    }
    public RotationAxes axes = RotationAxes.MouseXAndY;
    public float sensitivityHor = 9.0f;
    public float sensitivityVert = 9.0f;

    public float minimunVert = -45.0f;
    public float maximumVert = 45.0f;

    private float _rotationX = 0;

    // Start is called before the first frame update
    void Start()
    {
        Rigidbody body = GetComponent<Rigidbody>();
        if (body != null)
            body.freezeRotation = true;
    }

    // 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, minimunVert, maximumVert);

            float rotationY = transform.localEulerAngles.y;

            transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);

        }
        else
        {
            _rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
            _rotationX = Mathf.Clamp(_rotationX, minimunVert, maximumVert);

            float delta = Input.GetAxis("Mouse X") * sensitivityHor;
            float rotationY = transform.localEulerAngles.y + delta;

            transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
        }
    }
}

I think that Input.Axis gets all the axis’s, like wasd, joysticks, and yes the mouse moving up and down.

If you want to just get wasd, I would suggest using Input.Getkey(). You could do:

if (Input.GetKey(KeyCode.W)){
     // code to move character forward
}

Unfortunately if you go with this method you will have to put it in 4 times for each key. Hope this helped, if you have any questions just let me know.

I had that thought, but why would it only happen on the Y axis? Moving the mouse side to side doesn’t create cause the player to move along that axis. I think I may need to look at an example of another 3D controller to see any differences.