如何访问Unity中的主摄像头来制作缩放脚本?

时间:2016-07-26 15:00:08

标签: c# unity3d

我正在尝试为您点击多维数据集时制作一个简单的缩放脚本。我希望它放大立方体,但我找不到让主摄像机变焦的方法。我尝试了几种不同的方法。这是当前的一个。我在OnMouseDown中使用它,但它仍然不起作用,因此我将其移动到更新以查看是否可以使其工作。

void Update ()
{
  if(Input.GetKeyDown("z"))
  {
    Debug.Log("Pressed Z");
    zoomedIn = !zoomedIn;
  }

  if(zoomedIn == true)
  {
      Debug.Log("True!");
      Camera.main.GetComponent<Camera>().fieldOfView = Mathf.Lerp(GetComponent<Camera>().fieldOfView, zoom, Time.deltaTime*smooth);
  }
  else
  {
     Camera.main.GetComponent<Camera>().fieldOfView = Mathf.Lerp(GetComponent<Camera>().fieldOfView, normal, Time.deltaTime*smooth);
  }
}

1 个答案:

答案 0 :(得分:0)

看起来zoomnormal未分配给正确的值。另外,请确保您在Perspective,而不是Orthographic查看。

  

如果您想使用Orthographic视图,只需将fieldOfView的所有用法更改为orthographicSize,然后将zoom更改为合理的内容,例如5个单位。

normal应该是fieldOfView中检索到的相机的初始Start

// camera is a private field
private Camera camera;
camera = GetComponent<Camera>();
normal = camera.fieldOfView;

zoom应该是 less 的值,而不是normal(初始fieldOfView)从检查员分配的能够“放大”。

您的条件分支将更改为

if (zoomedIn) // Same as if (zoomedIn == true)
{
    camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, zoom, Time.deltaTime * smooth);
}
else
{
    camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, normal, Time.deltaTime * smooth);
}

或者,更简洁的版本:

camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, zoomedIn ? zoom : normal, Time.deltaTime * smooth);

我还建议使用Coroutine来执行此操作,而不是在Update中执行此操作。