繁体   English   中英

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

[英]How to access the main Camera in Unity to make a zoom script?

当您单击多维数据集时,我试图制作一个简单的缩放脚本。 我希望它在立方体上放大,但是找不到适合我的主相机缩放方法。 我尝试了几种不同的方法。 这是当前的。 我将其放在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);
  }
}

似乎没有将zoomnormal分配给正确的值。 还要确保您处于Perspective视图,而不是“ Orthographic视图。

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

normal应该是摄像机的初始fieldOfView ,在Start检索到:

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

zoom的值应小于检查员分配的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);

我还建议使用协程来执行此操作,而不要在Update中执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM