如何根据正在渲染的摄像机启用/禁用HUD

时间:2013-06-11 22:43:55

标签: unity3d

在我的场景中,我有一个MainCamera和一个MiniMapCamera。我还有一个HUD,目前正由两个相机绘制。我想将它从MiniMapCamera中删除但是当我使用Camera.current.name来检查哪个相机正在渲染时,它不起作用。我在Update()函数中执行此操作。我应该在其他地方尝试吗?

2 个答案:

答案 0 :(得分:2)

除了Jerdak的回答。您可以选择每个摄像机应呈现的层。

enter image description here

如果您在层次结构中选择它,则可以在Camera的检查器中看到剔除蒙版组合框。您可以检查相机应该渲染的图层。因此,您可以为您的gui元素分配layer,让MiniMapCamera根本不渲染它。

答案 1 :(得分:1)

我假设你有一个切换相机的机制?如果是这种情况,请使用该机制来跟踪当前活动的摄像机。

我不知道这是否仍然存在但Camera.current曾在 Unity的编辑器中运行应用程序时遇到问题。如果仍然如此,您可以尝试构建应用并查看Camera.current.name返回的值。

<强> [更新]

或者您可以将摄像机存储为游戏对象,并将活动摄像机与存储的摄像机进行比较,以确定哪些是活动的。这个解决方案应该只是间歇性地使用,因为做FindObjectsOfType每一帧都不是一个好主意。

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组件,否则渲染将无法知道使用哪个组件。