Unity2D——如何使Sprite显示在UGUI前面

假设已有Sprite S1Imgae I1,运行结果如图;


位于UGUI Canvas对象下的I1遮挡住了作为Sprite的S1,假设我们只想将Image作为背景,则需要将I1置于S1后方;


第一步

新建一个Camera,命名为UICamera,并更改ProjectionOrthographic(正交相机),并将Depth(相机深度)改为1;

同时记得将MainCameraClear FlagsSkybox改为Don't Clear,否则Skybox的颜色会覆盖UICamera的渲染画面;



第二步

CanvasRender ModeScreen Space-Overlay改为Screen Space-Camera


Screen Space-Overlay的作用是让Canvas永远前置在所有对象之前,不会被遮挡,可以用作制作血条、聊天框等固定前置的部件;

Screen Space-Camera的作用是将Canvas绑定一个摄像机,可以根据摄像机的Depth(相机深度)来调整和其他摄像机之间的显示次序,这里用到的原理就是这个;


第三步

指定UICameraCanvasRender Camera



第四步

点击运行,可以看见Sprite已经在UI前面了。



原理:

Unity2D模式下的基本相机运行原理如图所示,面对用户的方向为Z轴,用户的视线方向是从Z轴负方向到正方向。原来的MainCamera深度为0,意即渲染画面位于Z轴坐标0点处,而UICamera的相机深度为1,意即渲染画面位于Z坐标1点处,从而实现MainCamera渲染的画面覆盖了UICamera渲染的画面。


功能作用在于可以制作2D游戏的时候用Image对象来制作游戏背景,以及可以用Sprite对象结合UGUI制作滚动背包。