Pivoting instead of rotating

Hello! I wanted to ask if there is any way to make my character pivot when I move my FPS camera. My character is rotating & moving instead of staying still and pivoting when I look around (see youtube video).
Please do not type a whole script for me, but instead, tell me what to tweak. Thanks!

Mouse camera:


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

public class Mouselook : MonoBehaviour

{

    public float mouseSensitivity = 100f;
    public Transform Playerbody;
    private float xRotation = 0f;

    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    // Update is called once per frame
    void Update()
    {
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);
        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        Playerbody.Rotate(Vector3.up * mouseX);
       
       
       
    }
}


Movement:

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

public class PlayerMovement : MonoBehaviour
{
    public CharacterController controller;

    public float speed = 10f;
    public float gravity = -10f;
    public float jumpHeight = 5f;

    public Transform groundCheck;
    public float groundDistance = 0.4f;
    public LayerMask groundMask;

    Vector3 velocity;
    bool isGrounded;
   
    void Update()
    {
        isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);

        if(isGrounded && velocity.y < 0){
            velocity.y = -2f;
        }

        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");

        Vector3 move = transform.right * x + transform.forward * z;

        controller.Move(move * speed * Time.deltaTime);

        if(Input.GetButton("Jump") && isGrounded){
            velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
        }

        velocity.y += gravity * Time.deltaTime;

        controller.Move(velocity * Time.deltaTime);

    }
}

Youtube video link:

Is the script attached to the “Player” game object? If it is, it could be finding the median point between all children and rotating that, thus creating the pivot behavior you are seeing.

If that, indeed, is the case, I would fix it by parenting the Gun under the Graphics game object. Then, instead of rotating the Player GO, rotate Graphics GO and you should see that your player no longer pivots.

Check your origins of everything. You probably have something offset.

Thanks, I’ll double-check it.