草庐IT

Unity3D Canvas 的三种渲染模式 Screen Space - overlay, Screen Space - camera, World Space

流浪打工人 2023-05-22 原文

Canvas 有三种渲染模式(render mode): Screen Space - overlay(覆盖), Screen Space - camera(相机), World Space(世界)

  • Screen Space - overlay

覆盖模式,这种模式,一般用的比较多,它始终位于3D场景的最前面,会挡住3D场景中的物体(如果对应位置有UI)。在通常的渲染管线中,一般都是先画场景中的物体,最后画UI,所以这种模式下的UI会挡住3D场景中渲染出来的画面。

  • Screen Space - camera

相机模式,这种模式,需要搭配一个相机一起使用(假定该相机名字是 UICamera),该UI位于UICamera前方,与相机的距离可以通过Inspector面板上的Plane Distance设定,这个模式下的UI会受到UICamera设置的影响,比如UICamera设置的模式为透视模式(Perspective),那么渲染出的UI也会有远小近大的效果。

  • World Space

世界空间,这种模式比较好理解,可以直接把对应的UI对象当作一个3D对象,会被位置在它前面的其他3D物体挡住,也会挡住位置在它后面的3D物体。


Screen Space - overlay和Screen Space - camera渲染先后顺序:

结论:Screen Space - camera是属于在场景内渲染的结构,它的渲染顺序在常规的3D物体之后,但是在Screen Space - overlay的Canvas的渲染之前,验证的方式如下,第一幅图为UI的结构,有两个canvas,一个的render mode是Screen Space - overlay, 另外一个的render mode是Screen Space - camera。

canvas1 , render mode 是 Screen Space - camera

canvas2 , render mode 是 Screen Space -overlay

然后是frame debuger 的分析截图

frame debuger 的分析截图

所以验证得出Screen Space - camera模式的UI渲染时间是在 Screen Space - overlay模式的UI之前的,所以Screen Space - overlay模式的UI不仅仅会覆盖场景内的3D物体,也会挡住Screen Space - camera模式的UI(如果有重叠)。当然我们用同样的方式,也能测出World Space的UI的渲染顺序,这里简单说下结论,包含3D场景、Screen Space - overlay、Screen Space - camera、World Space的渲染顺序依次是:3D场景 -> World Space -> Screen Space - camera -> Screen Space - overlay, 截图如下:





以上是所有关于Unity3D Canvas的三种渲染模式的介绍,随手点赞,手有余香

有关Unity3D Canvas 的三种渲染模式 Screen Space - overlay, Screen Space - camera, World Space的更多相关文章

  1. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  2. Unity3D : 本地坐标系,世界坐标系,和TransformPoint,TransformVector,TransformDirection的区别 - 2

    目录一、世界坐标系与本地坐标系二、srcGameObject.transform.TransformPoint(Vector3 vec)三、srcGameObject.transform.TransformVector(Vector3 vec)四、srcGameObject.transform.TransformDirection(Vector3 vec)五:示例一、世界坐标系与本地坐标系    世界坐标很好理解,就是模型的transform.position,通常在无父物体的情况下,创建出来的模型默认位置就是世界坐标系的原点。    每个物体都有自身的坐标系,此坐标系就是本地坐标系。本地坐标

  3. Unity3D学习笔记8——GPU实例化(3) - 2

    文章目录1.概述2.详论2.1.自动实例化2.2.MaterialPropertyBlock3.参考1.概述在前两篇文章《Unity3D学习笔记6——GPU实例化(1)》《Unity3D学习笔记6——GPU实例化(2)》分别介绍了通过简单的顶点着色器+片元着色器,以及通过表面着色器实现GPU实例化的过程。而在Unity的官方文档CreatingshadersthatsupportGPUinstancing里,也提供了一个GPU实例化的案例,这里就详细论述一下。2.详论2.1.自动实例化一个有意思的地方在于,Unity提供的标准材质支持自动实例化,而不用像《Unity3D学习笔记6——GPU实例

  4. Unity3D不同脚本函数或参数之间调用 - 2

    脚本通讯假如,我们有两个脚本:Main.cs,SliderControl.cs。现在希望从SliderControl.cs调用Main.cs内的函数或参数。(一)、被调用脚本函数为static类型,调用时直接用类名.参数publicclassMain:MonoBehaviour{publicstaticintindex=0;}//在SliderControl.cs中调用indexintpara=Main.index;(二)、GameObject.Find(“脚本所挂载在的物体的名字”)找到游戏对象,再通过GetComponent().函数名()调用脚本中的函数,只能调用public类型函数pu

  5. unity3d - 我可以在 Unity3d 2017.2 中使用 Java 脚本语言吗? - 2

    我注意到在MonoDevelop编辑器中,javascript的自动更正不起作用。这是否意味着Unity愿意放弃JS?我可以在Unity2017.2中使用Java脚本语言吗? 最佳答案 是,您仍然可以在Unity2017.2中使用它。创建Javascript脚本的菜单消失了。您必须使用记事本等外部文件编辑器创建一个Javascript文件,然后将其拖到您的Unity项目中,它应该可以正常工作。它应该有.js扩展名。请注意,Unity正在从UnityEditor中剥离Javascript编译器,因此您以后将无法使用Javascript

  6. javascript - Firefox 权限 : 'name' member of PermissionDescriptor 'camera' is not a valid value for enumeration PermissionName - 2

    我正在制作一个网络应用,需要使用权限查询来检查是否已授予用户相机访问权限。我试过代码:navigator.permissions.query({name:'camera'}).then(function(result){console.log(result);});它在GoogleChrome70上运行良好,但在firefox上出现错误:TypeError:PermissionDescriptor“camera”的“name”成员不是枚举PermissionName的有效值。我一直在寻找这个问题,但没有任何帮助。有人能帮帮我吗?谢谢, 最佳答案

  7. 在Android中Unity3D透明背景的实现 - 2

    在Unity中,可以通过Window->Rendering->lighting->在属性面板中选择Environment,修改SkyboxMaterial为None来去掉天空盒。但去掉天空盒的效果是这样的:这样的效果明显不是预期的效果。去掉天空盒并不代表背景被透明,还需要设置Camera的背景。需要设置黑色透明度0,即ARGB为(0,0,0,0)。透明度不为0则无法实现透明效果。修改透明度后再导入Android中,运行的效果是这样的:奇怪,明明修改了透明度但没效果。其实设置透明度为0后即可在Android的Surface设置背景透明。在2021版Unity导出的AndroidLib源码中,在U

  8. javascript - 如何 Jest 模拟 react-native-camera? - 2

    我正在尝试测试react-native-camera模块与jest所以我有以下package.json:{"name":"app","version":"0.0.1","private":true,"main":"index.js","license":"MIT","scripts":{"start":"nodenode_modules/react-native/local-cli/cli.jsstart","test":"jest"},"dependencies":{"react":"~15.4.0-rc.4","react-native":"0.40.0","react-nativ

  9. Unity3D粒子系统之制作烟雾特效 - 2

    Unity3D粒子系统制作烟雾特效本文将会介绍如何使用Unity内的粒子系统制作烟雾效果。如果想了解Unity粒子系统中的基础属性,可以看这篇博客:Unity3D粒子系统之基础属性介绍先附上预览图:制作教程材质贴图首先我们需要一张烟雾材质用的材质贴图,我是自己画的,可以参考下图自己画一张或者去网上找素材。注意,一定要使用黑底的图片。将画好的图片导入Unity中。烟雾材质在Project窗口新键材质,名字和位置随自己习惯。Shader模式选择LegacyShaders/Particles/Additive,将之前导入的贴图拖入ParticleTexture中,如下图所示。这样需要用到的材质就创建

  10. 【虚拟仿真】Unity3D中实现InputField组件表格Tab或者Enter换行实现 - 2

    推荐阅读CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。一、前言在日常虚拟仿真项目开发中,可能会遇到要输入表格数据的情况,表格通常是使用UI的InputField组件生成,在输入数据的时候,需要输入→点击下一个输入框→再输入的流程,比较麻烦。因此,写了一个小工具,将这个脚本附到所有组成表格的InputField的父节点上,就可以实现Tab或者Enter实现换行,也就是切换到下一个输入框的功能。效果图:二、实现效果新建脚本TabInputField.cs,双击打开脚本编辑代码:

随机推荐