Cinemachine 虚拟摄像机在保持死区的同时在对象之间进行转换
Cinemachine Virtual Camera Transition between objects while keeping dead zone
- 3d 游戏
- 2 个游戏对象:A 和 B。(均在运行时生成)
我想要从对象 A 到 B 的平滑过渡,但前提是对象 B 在 vcam 的盲区之外。
Vcam 应该以静态旋转的方式观察物体。 (只有相机位置应该改变)
我假设我必须使用:
Follow property - because it only affects vcam transform
Framing Transposer - to use dead zones in body component
我已经尝试用 B 生成新的 vcam 并禁用第一个 vcam - 这可以在相机之间实现平滑过渡,但它总是这样做,即使 A 和 B 在第一个和第二个 vcam 的盲区内。
只有当新游戏对象位于前一个 vcam 的死区之外时,如何才能在 2 个游戏对象之间实现平滑的相机转换?
我知道我可以通过移动对象然后将 vcam 从 A 移动到 B 来做到这一点,这应该适用于死区,但如果可能的话,我正在寻找更清洁的解决方案
如何实现我在问题中描述的内容的描述由 Unity 工作人员 - Gregoryl 提供。
当东西进出死区时,CM 不会给你通知。
您可以通过轮询 B 相对于相机的位置并手动计算 CameraPosToB 和 CameraForward 之间的角度是否足够大,并在第二个 vcam 足够大时激活它来完成您正在寻找的内容。
这是代码的一部分 - 执行他描述的操作:
var angleToPlayer = Vector3.Angle(mainCamera.transform.forward, (player.transform.position - mainCamera.transform.position).normalized);
if (angleToPlayer > 20f)
{
cameraWatchingPlayer.enabled = false;
Destroy(cameraWatchingPlayer.gameObject, 3f);
InstantiateCamera(posX, posZ, player.transform);
}
- 3d 游戏
- 2 个游戏对象:A 和 B。(均在运行时生成)
我想要从对象 A 到 B 的平滑过渡,但前提是对象 B 在 vcam 的盲区之外。 Vcam 应该以静态旋转的方式观察物体。 (只有相机位置应该改变)
我假设我必须使用:
Follow property - because it only affects vcam transform
Framing Transposer - to use dead zones in body component
我已经尝试用 B 生成新的 vcam 并禁用第一个 vcam - 这可以在相机之间实现平滑过渡,但它总是这样做,即使 A 和 B 在第一个和第二个 vcam 的盲区内。
只有当新游戏对象位于前一个 vcam 的死区之外时,如何才能在 2 个游戏对象之间实现平滑的相机转换?
我知道我可以通过移动对象然后将 vcam 从 A 移动到 B 来做到这一点,这应该适用于死区,但如果可能的话,我正在寻找更清洁的解决方案
如何实现我在问题中描述的内容的描述由 Unity 工作人员 - Gregoryl 提供。
当东西进出死区时,CM 不会给你通知。
您可以通过轮询 B 相对于相机的位置并手动计算 CameraPosToB 和 CameraForward 之间的角度是否足够大,并在第二个 vcam 足够大时激活它来完成您正在寻找的内容。
这是代码的一部分 - 执行他描述的操作:
var angleToPlayer = Vector3.Angle(mainCamera.transform.forward, (player.transform.position - mainCamera.transform.position).normalized);
if (angleToPlayer > 20f)
{
cameraWatchingPlayer.enabled = false;
Destroy(cameraWatchingPlayer.gameObject, 3f);
InstantiateCamera(posX, posZ, player.transform);
}