记录:在Unity URP中使用UI相机

在Unity中制作UI时,我们通常习惯于单独使用一个Camera来拍摄UI内容。

主场景相机
UI相机
最终画面

这种制作方式有不少优点,比如避免了主场景相机的后处理效果可能会干涉UI内容等问题。

然而在Unity新出的URP(通用渲染管线)中,这一制作方法却有点问题。在相当长的一段时间内,LWRP/URP是无法像以前的内置渲染管线一样叠加Camera的。而后来,总算是可以了,但是操作方法与之前有所不同,故写文记录一下。

在URP中,Camera组件变成这样了

当我们直接把UICamera弄出来之后,我们会发现它的效果不符合预期。

这时候,我们需要手动多做几步:

首先,把UICamera的RenderType改成“Overlay

然后,把它添加到场景主相机的Stack中,

这样一来,我们就得到了符合预期的画面效果


更进一步

把UI相机手动添加到场景相机这个做法,足以应对大部分需求了。但是总觉得有点不舒服

于是去和小伙伴们讨论了一下,大概有两个思路:

思路一:全局只用一个Main Camera,由cinemachine来管理

思路二:没有什么事情是往上再摞一层不能解决的

首先我们搞个空的Camera,什么都不干,作为全局唯一的一个RenderType为Base的Camera,从游戏初始化的时候就直接DontDestroyOnLoad ,

然后UICamera和每个场景要用到的各种Camera都给放在这个Camera的Stack里面来。


那么,从代码里控制

实际上,即使在URP中,Camera还是那个Camera,UnityEngine.Camera那个Camera. 什么stack啊、renderType啊都是没有的。

它们都在这里:

在URP中,没有Camera上都会附带一个这样的组件,位于命名空间UnityEngine.Rendering.Universal

我们也可以对Camera组件使用扩展方法GetUniversalAdditionalCameraData来获得到它

而那个Stack,就是它里面的一个List<>

yomunsam

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

推荐ヾ(•ω•`)o