【问题标题】:Change Camera Distance of Cinemachine in script在脚本中更改 Cinemachine 的相机距离
【发布时间】:2021-05-14 05:41:54
【问题描述】:

在我的 (2D) 游戏中,我正在制作一个缩小相机的功能,并且我正在使用 Cinemachine。有没有办法在脚本中做到这一点?我查看了文档和所有地方,但没有找到任何东西。只有如何改变视野(这对我不起作用)。

]1

提前致谢!

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    在偶然发现您遇到的类似问题后,我发现您可以这样做:

    CinemachineComponentBase componentBase = virtualCamera.GetCinemachineComponent(CinemachineCore.Stage.Body);
    if (componentBase is CinemachineFramingTransposer)
    {
        (componentBase as CinemachineFramingTransposer).m_CameraDistance = 30; // your value
    }
    

    【讨论】:

    • 什么样的异常? 1. 我只是提供了这个作为指导。 virtualCamera 变量需要是 CinemachineVirtualCamera 的有效实例。 2. 你用的是什么版本的电影机?
    • NotImplementedException。我使用的是普通的 2d 电影摄影机
    【解决方案2】:

    我的建议是创建一个具有您想要的距离和位置的新虚拟相机,并禁用它的游戏对象开始。然后,通过脚本,您可以通过禁用当前摄像头并启用新摄像头来将当前摄像头更改为新摄像头。 Cinemachine 将自动处理到新相机的过渡。

    这是我用来管理多个摄像头的一种方法。

    public GameObject[] Cameras;
    
    public void ActivateCamera(int index)
    {
        for (int i = 0; i < Cameras.Length; i++)
        {
            if (i == index)
            {
                Cameras[i].SetActive(true);
            }
            else
            {
                Cameras[i].SetActive(false);
            }
        }
    }
    

    【讨论】:

    • @EnricoCortinovis 这很奇怪,我能够顺利过渡。
    • 对不起,不知道为什么它不起作用。感谢您的回答!这是完美的:)
    • 另外,你为什么用GameObject而不是CinemachineVirtualCamera?
    • 从我们的角度来看,我们不需要担心相机的实现。 Cinemachine 在幕后处理大部分事情。我们启用和禁用游戏对象作为暴露和隐藏我们想要使用的相机的一种方式。它的作用是在场景中添加或删除对象(在我们的例子中,它们恰好是相机)。
    猜你喜欢
    • 2022-11-24
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2022-09-11
    相关资源
    最近更新 更多