2013-06-11 20 views
1

在我的場景中,我有一個MainCamera和一個MiniMapCamera。我也有一個HUD,目前這兩款相機都在繪製。我想從MiniMapCamera中刪除它,但是當我使用Camera.current.name來檢查哪臺相機正在渲染時,它不起作用。我在Update()函數中這樣做。我應該嘗試別的地方嗎?如何啓用/禁用HUD,基於攝像頭渲染

回答

1

我假設你有一個機制來切換相機?如果是這種情況,請使用該機制來跟蹤哪個攝像頭當前處於活動狀態。

我不知道這是否仍然如此,但當您在Unity的編輯器中運行您的應用程序時Camera.current曾經有問題。如果仍然如此,您可以嘗試構建應用並查看Camera.current.name返回的值。

[更新]

或者你可以存儲你的相機作爲gameobjects和活動的攝像頭比較存儲的攝像機,以確定哪些是有效的。這個解決方案應該只能間歇地使用,因爲每個幀都不是一個好主意。

public class CurrentCamera : MonoBehaviour { 

    public Camera minimapCamera; 
    public Camera mainCamera; 

    void FindActiveCamera(){ 
     Camera[] cameras = FindObjectsOfType(typeof(Camera)) as Camera[]; 
     foreach (Camera cam in cameras) { 
      if(Camera.main == mainCamera)Debug.Log("Found main camera"); 
      if(Camera.main == minimapCamera)Debug.Log("Found minimap Camera"); 
     } 
    } 
    void Update(){ 
     FindActiveCamera(); 
     if(Input.GetButtonDown("Fire1")){ 
      minimapCamera.enabled = false; 
      mainCamera.enabled = true; 
     } 
     if(Input.GetButtonDown("Fire2")){ 
      minimapCamera.enabled = true; 
      mainCamera.enabled = false; 
     } 
    } 
} 

[UPDATE2]

爲了Camera.main正確註冊您的相機,相機對象的Tag必須設置爲MainCamera。可以設置多個MainCameras,只要確保在不活動的相機上禁用Camera組件,或者渲染器將不知道使用哪個組件。

+0

不幸的是,它永遠不會執行第二個if語句(小地圖)。我也試過'Camera.allCameras'而不是Find,那也沒用。 – gaitat

+0

@gaitat添加了上面的完整示例(測試和工作)。只需確保兩個攝像頭在編輯器中將「標記」設置爲「MainCamera」。 – Jerdak

+0

right..MainCamera標籤在這種情況下是強制性的 – Heisenbug

2

除了耶爾達克的回答。您可以選擇每個相機應該呈現的圖層。

enter image description here

如果您在層次結構中選擇它,你可以看到剔除面膜組合框在Camera的檢查。由於您可以檢查相機應該呈現的圖層。因此,您可以將layer分配給您的gui元素,並讓MiniMapCamera根本不會呈現它。

+0

我必須做一些非常錯誤的事情,因爲我已經嘗試過這種方法,但它不起作用。我不知道在哪裏看。 – gaitat

+0

如果每個對象都有正確的標記,那麼如果未選擇剔除掩碼相對值,則必須將其剔除。 – Heisenbug

+0

對我來說,有效的方法是關閉小地圖相機的GUILayer。我不知道這個行動的後遺症。 – gaitat