1

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

4

2 回答 2

2

除了杰达克的回答。您可以选择每个相机应该渲染的图层。

在此处输入图像描述

如果您在层次结构中选择它,您可以在 的检查器中看到Culling Mask组合框Camera。通过它您可以检查相机应该渲染的图层。因此,您可以将 a 分配layer给您的 gui 元素,而MiniMapCamera不要渲染它。

于 2013-06-12T07:31:35.960 回答
1

我假设您有切换相机的机制?如果是这种情况,请使用该机制来跟踪当前处于活动状态的相机。

我不知道这是否仍然正确,但是当您在Unity 的编辑器Camera.current中运行应用程序时曾经遇到过问题。如果情况仍然如此,您可以尝试构建您的应用程序并查看返回的值。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;
        }
    }
}

[更新2]

为了让 Camera.main 正确注册您的相机,相机对象的Tag必须设置为MainCamera. 可以设置多个MainCameras,只需确保禁用Camera非活动相机上的组件,否则渲染将不知道使用哪个。

于 2013-06-11T23:43:04.997 回答