在我的项目中,我使用2个摄像头:
1.用于场景3D元素的主摄像机;
- 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对象:
1条答案
按热度按时间91zkwejq1#
事实证明这比我想象的要容易。非常感谢derHugo:)
问题
这里的问题是camera depth:
-1
;0
深度;0
。由于摄像机深度控制摄像机的渲染顺序,深度较低的摄像机会在深度较高的摄像机之前渲染。因此,当我将摄像机更改为正交摄影机时,它们会在UI的相同深度中渲染,完全掩盖了UI。
溶液
我将正交摄影机的深度更改为
-1
(与主摄影机相同),这样就解决了问题。注:这与使用透视或正投影的相机无关。
演示
1.之前
2.之后