簡體   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