首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问主相机在联合制作变焦脚本?

如何访问主相机在联合制作变焦脚本?
EN

Stack Overflow用户
提问于 2016-07-26 15:00:08
回答 1查看 666关注 0票数 0

我试着做一个简单的缩放脚本,当你点击一个立方体。我想要它放大立方体,但我找不到办法使主相机变焦为我。我尝试过几种不同的方法。这是目前的一张。我把它放在一个OnMouseDown中,但是它仍然不能工作,所以我把它移到了更新中,看是否可以让它工作。

代码语言:javascript
复制
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);
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-26 16:35:48

看起来zoomnormal没有分配给正确的值。还要确保您在Perspective,而不是Orthographic视图中。

如果您想使用Orthographic视图,只需将fieldOfView的所有用法更改为orthographicSize,并将zoom更改为合理的东西,比如5个单元。

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

代码语言:javascript
复制
// camera is a private field
private Camera camera;
camera = GetComponent<Camera>();
normal = camera.fieldOfView;

zoom应该小于normal (初始fieldOfView),以便能够“放大”。

您的条件分支将更改为

代码语言:javascript
复制
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);
}

或者,更简洁的版本:

代码语言:javascript
复制
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, zoomedIn ? zoom : normal, Time.deltaTime * smooth);

我还建议使用Coroutine来完成这个任务,而不是在Update中这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38593412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档