动态控制 Unity Cinemachine vCams Blends:如何?
Dynamically control Unity Cinemachine vCams Blends: HOW?
我找不到如何根据英雄的速率和高度不断地在 3 个摄像机(我称它们为 中间、上部和下部 )之间动态混合。
跟随英雄时,中间的vCam是main/base,我想根据英雄的高度按比例混合上下vCam。
player/hero可以在不同高度之间快速移动,因此应该轻松地对混合进行加权。这是 Cinemachine 混合的自然组成部分。并且有效。但这对我来说就像一个开关,以我目前对 Cinemachine 混合的理解,而不是基于高度的恒定动态混合。
据我所知,您可以在 Cinemachine 混合选项中定义混合样式。从描述来看,当您可能想要类似于 EaseIn/EaseOut 的内容时,它似乎设置为 "Cut"。如果默认选项不适合您,它甚至允许您在相机之间定义自己的自定义混合。
查看 documentation 了解更多详情。
您可以考虑卸下上下摄像头,自己做 "Manual blending" 只用中间的摄像头。最近我一直在使用 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;
}
这样你就可以在条件下使用你的玩家高度,代价是必须设计好相机逻辑。
也许这会以某种方式帮助你做你想做的事。
我找不到如何根据英雄的速率和高度不断地在 3 个摄像机(我称它们为 中间、上部和下部 )之间动态混合。
跟随英雄时,中间的vCam是main/base,我想根据英雄的高度按比例混合上下vCam。
player/hero可以在不同高度之间快速移动,因此应该轻松地对混合进行加权。这是 Cinemachine 混合的自然组成部分。并且有效。但这对我来说就像一个开关,以我目前对 Cinemachine 混合的理解,而不是基于高度的恒定动态混合。
据我所知,您可以在 Cinemachine 混合选项中定义混合样式。从描述来看,当您可能想要类似于 EaseIn/EaseOut 的内容时,它似乎设置为 "Cut"。如果默认选项不适合您,它甚至允许您在相机之间定义自己的自定义混合。
查看 documentation 了解更多详情。
您可以考虑卸下上下摄像头,自己做 "Manual blending" 只用中间的摄像头。最近我一直在使用 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;
}
这样你就可以在条件下使用你的玩家高度,代价是必须设计好相机逻辑。
也许这会以某种方式帮助你做你想做的事。