【Unity】URP Camera Stack(多相机栈渲染)使用记录

发布于 2020-02-09  213 次阅读


前言

更新了URP之后,一直苦于URP和FGUI不能同时使用
之前写了几篇文章,都是在编辑器内生效,实测打包到Android平台没有用
头疼了好久,终于在Unity论坛上找到这篇回帖
Unity forum
写到Unity URP的Camera Stack已经在测试阶段了
一切指向github上这个pr
看了下时间,是19年9月提交的...之前一直没翻到,国内也没有任何资料就比较尴尬
继续查看了一下,发现已经合并到master里面了
也就是说最新的URP 8.0.0版本就有这个Camera Stack功能
于是赶紧clone下来

导入到unity package manager

URP8.0.0版本在Uniry中是不会显示出来的,因此只能从本地导入
打开package manager面板,点击左上角的加号
选择从本地磁盘导入(Add package from disk)
20200209151605.png
找到clone下来的SRP,按照依赖顺序导入
- com.unity.render-pipelines.core
- com.unity.render-pipelines.shadergraph
- com.unity.render-pipelines.universal

导入后,如果没有反应可以尝试重新启动一下工程
等待Unity加载这些包,加载完毕后
Package Manager里面会显示使用了URP的8.0.0(local)本地版本
此时我遇到报错提示
UniversalRenderPipelineCameraEditor.cs404行OnDisable方法未找到
使用VS打开这个脚本,查看是继承的Editor基类没有OnDisable方法
根据上下文的逻辑可以判断这里是做一些析构清理操作,于是我先随便改成OnDestroy看看效果

Ps. 也许这样改不太科学,但是先做做测试,看看最关键的Camera Stack能否使用

改完后发现没有报错了,相机组件也成功刷出了Stack的选项

使用 Camera Stack 功能

clone下来的SRP工程,可以进入到如下目录查看说明文档
com.unity.render-pipelines.universal/Documentation~
其中专门有一个文档camera-stacking.md介绍了这个功能
我们可以看到,之前我一直疑惑的相机的第一个属性Render Type终于可以进行下拉选择了
image.png
- base 标准的相机模式
- overlay 覆盖模式,类似之前的Depth Only操作
- ui(这个实际上还没有,但是在youtube的预览视频里面有,目前对我而言作用不大)
要想一个相机画面覆盖在另外一个相机上的操作步骤如下:
1. 主相机Render Type设置为Base
2. 覆盖相机设置为Overlay,并设置Rendering中的Culling Mask为需要覆盖的层(类比以前的depth方式)
3. 回到主相机,在Stack项中点击加号,添加覆盖相机(只有设置为Overlay的相机可以被添加到Stack中)
如果有多个需要覆盖显示的相机,拖动他们的排序,就是之前控制Depth值的操作了

使用FGUI

导入FGUI的包,在Unity 2020中,已经移除了Asste Store
提示在Package Manager中选择My Asstes
Unity这么做可能是想让包的管理更加统一一点吧,但是目前Package Manager中无法浏览线上的资源
只能先在网页中添加到My Asstes后,再到Package Manager中添加
绕来绕去的还是挺麻烦(最近一两年Unity的变动实在太大)
添加了FGUI后,我直接在测试场景中进行修改,将显示UI的Stage Camera设置为Overlay
再添加一个主相机,加上3D场景,终于可以使用FGUI了
image.png

模拟器测试

使用2020.1a22版本打包Android APK
在夜神模拟器上进行测试,完全Ok,终于可以正常使用URP+FGUI了
为了测试,我还顺便添加了Volume的Post Processing后期效果
20200209202601.png

后记

目前只是单独使用FGUI,如果是在ET框架中通过代码来打开FGUI界面,还需要设置Camera组件的Render Type
感觉还是有点复杂的哦,不过好歹还是让我看到点曙光
目前的Camera Stack还不是正式版本(毕竟都没显示出来...)
希望能够早日更新,使用起来更加方便吧,这里挺赞成那篇帖子中一个网友的观点(稍微翻译一下)
为什么叫'Unity'?应该是把所有好用的,有趣的东西都'集中'起来,而不是把糟糕的东揉成一团
说句实话,从3.5版本开始用Unity这么多年了,虽然现在确实有些东西不是那么便利,不是那么那么人性化,但我们还是可以看到Unity的开发者们也在不断努力。让Unity成为一个集大成者,这应该也就是这个引擎的初心吧

Comments


来自像素世界的代码家,创造第九艺术!