You could try to enable this option in vcam2:
That will apply the outgoing vcam position/rotation to the incoming one, even if the outgoing is a blend.
Depending on your setup, you might be interested in an alternative approach, which is to add a custom extension to your main vcam that adds rotation based on user input. It could reset itself if there is no user input after a specified delay.
As luck would have it, I happen to have just such an extension. To try it out, just drop it in your project and add it to your vcam via the Extensions dropdown in the vcam’s inspector.
using UnityEngine;
using Cinemachine;
/// <summary>
/// An add-on module for Cinemachine Virtual Camera that adds extra rotation
/// in response to user input.
/// </summary>
public class CinemachineExtraPOV : CinemachineExtension
{
/// <summary>The Vertical axis. Value is -90..90. Controls the vertical orientation</summary>
[Tooltip("The Vertical axis. Value is -90..90. Controls the vertical orientation")]
[AxisStateProperty]
public AxisState m_VerticalAxis;
/// <summary>Controls how automatic recentering of the Vertical axis is accomplished</summary>
[Tooltip("Controls how automatic recentering of the Vertical axis is accomplished")]
public AxisState.Recentering m_VerticalRecentering;
/// <summary>The Horizontal axis. Value is -180..180. Controls the horizontal orientation</summary>
[Tooltip("The Horizontal axis. Value is -180..180. Controls the horizontal orientation")]
[AxisStateProperty]
public AxisState m_HorizontalAxis;
/// <summary>Controls how automatic recentering of the Horizontal axis is accomplished</summary>
[Tooltip("Controls how automatic recentering of the Horizontal axis is accomplished")]
public AxisState.Recentering m_HorizontalRecentering;
private void Reset()
{
m_VerticalAxis = new AxisState(-70, 70, false, false, 1, 0.1f, 0.1f, "Mouse Y", true)
{ m_SpeedMode = AxisState.SpeedMode.InputValueGain };
m_VerticalRecentering = new AxisState.Recentering(true, 0.5f, 0.5f);
m_HorizontalAxis = new AxisState(-180, 180, true, false, 1, 0.1f, 0.1f, "Mouse X", false)
{ m_SpeedMode = AxisState.SpeedMode.InputValueGain };
m_HorizontalRecentering = new AxisState.Recentering(true, 0.5f, 0.5f);
}
private void OnValidate()
{
m_VerticalAxis.Validate();
m_VerticalRecentering.Validate();
m_HorizontalAxis.Validate();
m_HorizontalRecentering.Validate();
}
protected override void OnEnable()
{
base.OnEnable();
UpdateInputAxisProvider();
}
void UpdateInputAxisProvider()
{
m_HorizontalAxis.SetInputAxisProvider(0, null);
m_VerticalAxis.SetInputAxisProvider(1, null);
if (VirtualCamera != null)
{
var provider = VirtualCamera.GetInputAxisProvider();
if (provider != null)
{
m_HorizontalAxis.SetInputAxisProvider(0, provider);
m_VerticalAxis.SetInputAxisProvider(1, provider);
}
}
}
protected override void PostPipelineStageCallback(
CinemachineVirtualCameraBase vcam,
CinemachineCore.Stage stage, ref CameraState state, float deltaTime)
{
if (stage == CinemachineCore.Stage.Aim)
{
// Only read joystick when game is playing
if (deltaTime >= 0 && CinemachineCore.Instance.IsLive(VirtualCamera))
{
if (m_HorizontalAxis.Update(deltaTime) | m_VerticalAxis.Update(deltaTime))
{
m_HorizontalRecentering.CancelRecentering();
m_VerticalRecentering.CancelRecentering();
}
m_HorizontalRecentering.DoRecentering(ref m_HorizontalAxis, deltaTime, 0);
m_VerticalRecentering.DoRecentering(ref m_VerticalAxis, deltaTime, 0);
}
var tilt = state.RawOrientation * Quaternion.AngleAxis(m_VerticalAxis.Value, Vector3.right);
var rot = Quaternion.AngleAxis(m_HorizontalAxis.Value, state.ReferenceUp) * tilt;
state.OrientationCorrection = Quaternion.Inverse(state.CorrectedOrientation) * rot;
}
}
}