- Home /
How to make the main camera rotate with the player's directions?
I have the following script attached to the main camera which should make it follow and rotate with the player's movements.
public class FollowPlayer : MonoBehaviour
{
[SerializeField]
float mouseSensitivity;
public Vector3 cameraOffset;
public Transform Player;
public Transform mainCamera;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
cameraOffset = transform.position - Player.transform.position;
}
void Update()
{
Rotate();
}
private void Rotate()
{
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
Player.Rotate(Vector3.up, mouseX);
mainCamera.Rotate(Vector3.up, mouseX); //shows abnormal rotation (hides the player as well)
}
private void LateUpdate()
{
Vector3 newPosition = Player.position + cameraOffset;
transform.position = newPosition;
}
}
The camera follows the player, however, but it does not rotate with the player's rotations. Please note that making the main camera the child of the player is not an option here, since I have to use this script on multiplayer. I want the mouse to be able to rotate both the main camera and the player at the same time.
Answer by valorantggwp999 · Mar 23 at 06:36 PM
#if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem;
#endif
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowPlayer : MonoBehaviour
{
public float mouseSensitivity = 100f;
public Transform playerBody;
float xRotation = 0f;
// Start is called before the first frame update
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update()
{
#if ENABLE_INPUT_SYSTEM
float mouseX = 0, mouseY = 0;
if (Mouse.current != null)
{
var delta = Mouse.current.delta.ReadValue() / 15.0f;
mouseX += delta.x;
mouseY += delta.y;
}
if (Gamepad.current != null)
{
var value = Gamepad.current.rightStick.ReadValue() * 2;
mouseX += value.x;
mouseY += value.y;
}
mouseX *= mouseSensitivity * Time.deltaTime;
mouseY *= mouseSensitivity * Time.deltaTime;
#else
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
#endif
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
playerBody.Rotate(Vector3.up * mouseX);
}
}
Your answer
Follow this Question
Related Questions
How to make an empty child object not rotate with parent? 1 Answer
Camera rotates around player but player movement is incorrect 1 Answer
How to "clamp" a y rotation in unity? 0 Answers
Unable to turn character upside down due to problem with mouse look script 1 Answer
Getting cosinus of an angle in degrees 3 Answers