CocosCreator:2D摄像机跟随、多相机渲染
版本:3.6.3
之前处理过一次类似的需求,当时想着总结一下来着。结果因为其他的事情忘记了。然后当下又遇到了相同的需求,处理起来并没有那么顺畅。还是不如在B站上记一下啊。
需求:
角色、背景、文案提示or菜单等。摄像机跟随角色移动,场景跟随摄像机移动,文案、菜单等按照适配固定的显示在屏幕上的某个位置。
反面案例:
首先按照记忆中的经验,创建两个相机。
一个渲染角色和背景,并跟随角色移动。
一个渲染UI和一些静态的资源,比如音效按钮、文案提示等
问题出现了,一些原本应该出现在屏幕上的元素并没有被成像到屏幕。
出现了问题先去查了官方文档。

查看了文档后并没有得到什么实质性的帮助。事实上解决方案文档中有描述,但是一笔带过了,当时看了两遍都没有注意到。

对于个人来说,对这个属性没那么敏感,一是它描述的不那么清楚,对于不太了解“帧缓冲”、“天空盒”这些的,没那么好理解。二就是平时做的大多是2D,专业知识学习的不多,能处理问题就行,技术确实没那么好。
以上可以理解为不那么废话的废话,现在开始处理问题,在处理问题之前先了解一些专业术语。
帧缓存:又称为”帧缓冲”,它是指存储图形画面数据的一种缓冲区,它可以保存和管理图形输入、输出、变化和处理过程中所产生的每一帧图形数据。它主要用来存储图形图像,以支持动态图形处理和加速图形渲染操作。
景深(DOF):是指在摄影机镜头或其他成像器前沿能够取得清晰图像的成像所测定的被摄物体前后距离范围
Skybox:是一种用于游戏开发的3D环境,它可以模拟出游戏世界的天空和远景。

关于这些术语包括clearflag的选择Cocos官方文档没有过多详细描述,以下都是到Unity官网上去扒的,想着应该是类似的处理,至少目前个人是这么理解的。贴一些Unity对camera组件的描述:https://docs.unity3d.com/cn/current/Manual/class-Camera.html
1.创建两个摄像机,分组自定义设置分别去渲染player、bg和文案tip

在相机组件中分别设置以下3个属性:

Priority:相机的渲染优先级,值越小越先渲染
Visibility:相机的渲染分组,也就是上面设置的自定义的分组,决定了相机会渲染哪些节点。
Clear Flags:将渲染UI和静态元素的上层节点的相机UICamera的ClearFlag设置为 Depth Only。这样将在屏幕上保持环境的图形显示,但丢弃有关每个对象在 3D 空间中所处位置的所有信息。绘制UI时,不透明部分将完全覆盖所绘制的任何对象(无论它与环境的接近程度如何)。

这样随着镜头跟随player移动时环境会变化,但被单独相机渲染的tip文案或其他的UI元素仍待在屏幕上的某个适配的位置。