Unity3D:将相机从透视更改为正交隐藏UI元素

q8l4jmvw  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(416)

在我的项目中,我使用2个摄像头:
1.用于场景3D元素的主摄像机;

  1. UI元素的辅助摄像头,我需要(?),因为我想在UI内部渲染3D对象(我遵循this YouTube tutorial)。
    -实际上,我不能100%确定这是否是在UI中渲染3D对象的唯一和/或正确方法,但我还没有找到任何其他解决方案。

Unity检查员

主摄像头

下面是主摄影机的检查器(透视投影):

正交摄影机

其中一个正交摄影机的检查器:

UI摄像头

UI摄像头的检查器(也是正交):

画布详细信息

我用于UI的画布的检查器:

我尝试为不同的正交投影做一种切换,使用不同的摄像机来改变视角。因此,我做了一个下拉UI元素,看起来工作得很好:我使用gameobject.SetActive(bool)方法切换摄像头,尽管docs要求使用enabled属性切换摄像头,因为这不起作用。

切换摄像机脚本

public class ChangeCamera : MonoBehaviour
{
    public List<Camera> cameras;

    public void SetCamera(int camera)
    {
        for (int i = 0; i < cameras.Count; i++)
        {
            cameras[i].gameObject.SetActive(i == camera);
        }
    }
}

问题

到目前为止一切顺利。问题是,当我将相机切换到播放模式时,UI消失了。

演示

1.透视摄像机

切换摄像头前(UI正确显示):

2.正交摄影机

将摄像机切换为正交后(UI消失):

这就是我在"场景"窗口中看到的:

更新

将Canvas的"Render Mode"设置为Screen Space - Overlay似乎可以解决这个问题,但我无法在UI中看到3D对象:

91zkwejq

91zkwejq1#

事实证明这比我想象的要容易。非常感谢derHugo:)

问题

这里的问题是camera depth

  • 主摄像机(透视)深度为-1;
  • UI照相机具有0深度;
  • 正交照相机具有深度0

由于摄像机深度控制摄像机的渲染顺序,深度较低的摄像机会在深度较高的摄像机之前渲染。因此,当我将摄像机更改为正交摄影机时,它们会在UI的相同深度中渲染,完全掩盖了UI。

溶液

我将正交摄影机的深度更改为-1(与主摄影机相同),这样就解决了问题。
注:这与使用透视或正投影的相机无关。

演示

1.之前

2.之后

相关问题