- Home /
How to rotate cameras in cinemachine?
Hello! I am new here and have been trying hard to figure this one out but so far running into a wall.
I have 3 vcam's in a line and at a 45 degree angle upward from the player. Each vcam is set further away from the player, i blend between each camera via the main camera brain using the mouse scroll wheel to effectively zoom in and out from my player.
I want to rotate these 3 vcams around the player using the Q and E buttons. The script i have works at rotating the camera (tested with vcams disabled on the standard main camera) however the cinemachine cams dont respond to the command and are effectively locked in place.
Is there a solution to this? Or is there a better approach?
UserControls userControls;
[SerializeField]
private CinemachineVirtualCamera vcam1;
[SerializeField]
private CinemachineVirtualCamera vcam2;
[SerializeField]
private CinemachineVirtualCamera vcam3;
//Camera Zoomhttps://answers.unity.com/questions/ask.html#
Vector2 camZoom;
//Camera Rotation
[SerializeField]
private Transform camTarget;
[SerializeField]
private Transform targetCam;
bool rotationDirection;
public float rotationSpeed = 5f;
private void Awake()
{
userControls = new UserControls();
}
void Start()
{
//Camera Zoom
userControls.PlayerMap.ViewZoom.performed += ctx => camZoom = ctx.ReadValue<Vector2>();
//Camera Rotation
userControls.PlayerMap.ViewRotation.performed += ctx => rotationDirection = ctx.ReadValueAsButton();
userControls.PlayerMap.ViewRotation.canceled += ctx => rotationDirection = ctx.ReadValueAsButton();
}
void LateUpdate()
{
if (rotationDirection)
{
targetCam.transform.RotateAround(camTarget.transform.position, Vector3.up, rotationSpeed * Time.deltaTime);
Debug.Log("rotate cam performed");
}
Vector3 zoom = new Vector3(0, camZoom.y, 0);
if (camZoom.y > 1 && vcam1.Priority == 1)
{
vcam1.Priority = 0;
vcam2.Priority = 1;
vcam3.Priority = 0;
camZoom.y = 0;
}
else if (camZoom.y < -1 && vcam2.Priority == 1)
{
vcam1.Priority = 1;
vcam2.Priority = 0;
vcam3.Priority = 0;
camZoom.y = 0;
}
if (camZoom.y < -1 && vcam1.Priority == 1)
{
vcam1.Priority = 0;
vcam2.Priority = 0;
vcam3.Priority = 1;
camZoom.y = 0;
}
else if (camZoom.y > 1 && vcam3.Priority == 1)
{
vcam1.Priority = 1;
vcam2.Priority = 0;
vcam3.Priority = 0;
camZoom.y = 0;
}
}
private void OnEnable()
{
userControls.Enable();
}
private void OnDisable()
{
userControls.Disable();
}
}
Answer by Tejeda568 · Mar 15, 2021 at 10:18 AM
Do not rotate the Virtual Camera. POV: Rotate the Virtual Camera based on the user's input. Same As Follow Target: Set the camera's rotation to the rotation of the Follow target. Hard Look At: Keep the Look At target in the center of the camera frame.
Your answer
Follow this Question
Related Questions
camera rotation help in bolt script 0 Answers
camera zoom 1 Answer
Camera defaulting to -90 Y 0 Answers
RTS Camera control - Rotation with MMB 0 Answers