动态控制Unity Cinemachine vCams Blends:如何?

时间:2019-05-13 13:16:33

标签: unity3d dynamic cinemachine

我找不到如何不断根据英雄的身高和身高动态地在3个摄像机(我称它们为“中,上,下”)之间动态融合的方法。

当跟随英雄时,中间的vCam是主要/基础的,我想根据英雄的高度按比例混合上下vCam。

播放器/英雄可以在不同高度之间快速移动,因此应轻松地对混合进行加权。这是Cinemachine混合的自然组成部分。和工程。但是,就我目前对Cinemachine混合的了解而言,这就像一个开关,而不是基于高度的恒定动态混合。

2 个答案:

答案 0 :(得分:4)

您可以考虑卸下上,下摄像机,并仅对中摄像机进行“手动混合”。最近,我一直在使用Cinemachine,并且所做的事情与您期望的结果类似。

由于我不完全了解您希望相机如何表现,因此向您展示了我完成的一些手动混合,并解释说:

//Camera Direction
//If I´m not in ground, and I've been on the air for a specific time
if (!onGround && timeSinceLastJump > cameraDelay)
{
   //Moves the offset of the camera down to the maximum allowed y offset (In your case it would be where the lower camera is)
    if (vcam.GetCinemachineComponent<CinemachineTransposer>().m_FollowOffset.y >= maxYOffset)
        vcam.GetCinemachineComponent<CinemachineTransposer>().m_FollowOffset.y -= offsetYSensivity;
    //It also zooms out up to a specified level
    if (vcam.m_Lens.OrthographicSize < maxFOV)
        vcam.m_Lens.OrthographicSize += camSensivity;
}
else
{
    //Same but upwards
    if (vcam.GetCinemachineComponent<CinemachineTransposer>().m_FollowOffset.y <= minYOffset)
        vcam.GetCinemachineComponent<CinemachineTransposer>().m_FollowOffset.y += offsetYSensivity;
    //Same but zooming in
    if (vcam.m_Lens.OrthographicSize > minFOV)
        vcam.m_Lens.OrthographicSize -= camSensivity;
}

通过这种方法,您可以在一定条件下使用播放器的高度,但必须精心设计摄像头逻辑。

也许这可以以某种方式帮助您完成自己想要的事情。

答案 1 :(得分:-1)

根据我记得,您可以在Cinemachine混合选项中定义混合样式。根据描述,当您可能想要类似于EaseIn / EaseOut的内容时,似乎将其设置为“剪切”。如果默认选项对您不起作用,它甚至允许您在摄像机之间定义自己的自定义混合。

查看documentation了解更多详细信息。