65 lines
2.3 KiB
C#
65 lines
2.3 KiB
C#
using UnityEngine;
|
|
|
|
namespace Unity.Cinemachine.Samples
|
|
{
|
|
public class BlendStyleManager : MonoBehaviour
|
|
{
|
|
class EarlyLookBlender : CinemachineBlend.IBlender
|
|
{
|
|
// This method is free to blend the states any way it likes.
|
|
// In this case, we do a default blend then override the rotation to make
|
|
// it happen at the beginning of the blend.
|
|
public CameraState GetIntermediateState(ICinemachineCamera CamA, ICinemachineCamera CamB, float t)
|
|
{
|
|
var stateA = CamA.State;
|
|
var stateB = CamB.State;
|
|
|
|
// Standard blend - first we disable cylindrical position
|
|
stateA.BlendHint &= ~CameraState.BlendHints.CylindricalPositionBlend;
|
|
stateB.BlendHint &= ~CameraState.BlendHints.CylindricalPositionBlend;
|
|
var state = CameraState.Lerp(stateA, stateB, t);
|
|
|
|
// Override the rotation blend: look directly at the new target
|
|
// at the start of the blend
|
|
const float kFinishRotatingAt = 0.2f;
|
|
var rotB = Quaternion.LookRotation(
|
|
stateB.ReferenceLookAt - state.RawPosition, state.ReferenceUp);
|
|
state.RawOrientation = Quaternion.Slerp(
|
|
stateA.RawOrientation, rotB, Damper.Damp(1, kFinishRotatingAt, t));
|
|
|
|
return state;
|
|
}
|
|
}
|
|
|
|
EarlyLookBlender m_CustomBlender = new ();
|
|
|
|
bool m_UseCustomBlend;
|
|
|
|
public void OnBlendCreated(CinemachineCore.BlendEventParams evt)
|
|
{
|
|
// Override the blender with a custom blender
|
|
if (m_UseCustomBlend)
|
|
evt.Blend.CustomBlender = m_CustomBlender;
|
|
}
|
|
|
|
public void DefaultBlend()
|
|
{
|
|
m_UseCustomBlend = false;
|
|
ChangeCamera();
|
|
}
|
|
|
|
public void CustomBlend()
|
|
{
|
|
m_UseCustomBlend = true;
|
|
ChangeCamera();
|
|
}
|
|
|
|
void ChangeCamera()
|
|
{
|
|
// Cycle through all the virtual cameras, assuming that they all have the same priority.
|
|
// Prioritize the least-recently used one.
|
|
int numCameras = CinemachineCore.VirtualCameraCount;
|
|
CinemachineCore.GetVirtualCamera(numCameras - 1).Prioritize();
|
|
}
|
|
}
|
|
} |