Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在脚本中更改Cinemachine的摄影机距离_C#_Unity3d - Fatal编程技术网

C# 在脚本中更改Cinemachine的摄影机距离

C# 在脚本中更改Cinemachine的摄影机距离,c#,unity3d,C#,Unity3d,在我的2D游戏中,我制作了一个缩小相机的功能,我使用的是cinemachine。在脚本中有这样做的方法吗?我看了文档,到处都是,但什么也没找到。只有如何改变我看不到的视野 ] 提前谢谢 我的建议是创建一个新的虚拟摄像机,其中包含您所需的距离和位置,并禁用其游戏对象。然后,通过脚本,可以通过禁用当前摄影机并启用新摄影机,将当前摄影机更改为新摄影机。Cinemachine将自动处理到新相机的过渡 下面是一个我用这种方式管理多个摄像头的方法 public GameObject[] Cameras;

在我的2D游戏中,我制作了一个缩小相机的功能,我使用的是cinemachine。在脚本中有这样做的方法吗?我看了文档,到处都是,但什么也没找到。只有如何改变我看不到的视野

]


提前谢谢

我的建议是创建一个新的虚拟摄像机,其中包含您所需的距离和位置,并禁用其游戏对象。然后,通过脚本,可以通过禁用当前摄影机并启用新摄影机,将当前摄影机更改为新摄影机。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);
        }
    }
}

我的建议是用你想要的距离和位置创建一个新的虚拟摄像机,并禁用它的游戏对象。然后,通过脚本,可以通过禁用当前摄影机并启用新摄影机,将当前摄影机更改为新摄影机。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);
        }
    }
}

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

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

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

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

@EnricoCortinovis这很奇怪,我能在我这边顺利过渡。对不起,我不知道为什么它不起作用。谢谢你的回答!它是完美的:另外,为什么你使用GameObject而不是CinemachineVirtualCamera?从我们的角度来看,我们不需要担心摄像头的实现。Cinemachine在幕后处理大部分事情。我们启用和禁用游戏对象,作为暴露和隐藏我们想要使用的相机的一种方式。这样做的目的是从场景中添加或删除对象。在我们的例子中,它们恰好是摄影机。@EnricoCortinovis这很奇怪,我能够在我这边实现平滑过渡。对不起,我不知道为什么它不起作用。谢谢你的回答!它是完美的:另外,为什么你使用GameObject而不是CinemachineVirtualCamera?从我们的角度来看,我们不需要担心摄像头的实现。Cinemachine在幕后处理大部分事情。我们启用和禁用游戏对象,作为暴露和隐藏我们想要使用的相机的一种方式。这样做的目的是从场景中添加或删除对象在我们的例子中,它们恰好是摄影机。什么样的异常?1.我只是提供这个作为指导。virtualCamera变量必须是CinemachineVirtualCamera的有效实例。2.您正在使用什么版本的cinemachine?未实现例外。我使用的是普通的2d cinemachine相机什么样的例外?1.我只是提供这个作为指导。virtualCamera变量必须是CinemachineVirtualCamera的有效实例。2.您正在使用什么版本的cinemachine?未实现例外。我使用的是普通的2d cinemachine相机