在我的场景中,我有一个MainCamera和一个MiniMapCamera。我还有一个HUD,目前正由两个相机绘制。我想将它从MiniMapCamera中删除但是当我使用Camera.current.name
来检查哪个相机正在渲染时,它不起作用。我在Update()
函数中执行此操作。我应该在其他地方尝试吗?
答案 0 :(得分:2)
除了Jerdak的回答。您可以选择每个摄像机应呈现的层。
如果您在层次结构中选择它,则可以在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
组件,否则渲染将无法知道使用哪个组件。