场景镜头2-第二摄像机

Unity UGUI 背包物品拖动实现

“这是我参与8月更文挑战的第3天,活动详情查看:[8月更文挑战]”


❓时常思考,有时候游戏中会在同一个屏幕显示多个相机拍摄到的画面,类似于小区监控显示器那样的。那这样的效果肯定是需要多个相机吧,但如何实现的确切方式到底是怎么做到的


Unity 中的 Render Texture 提供了一种简便的方式,无需代码即可实现

Camera

首先我们需要一个Camera(除了MainCamera),在一个由系统添加的标准Camera中,能看到如下组件

image.png
一些使用中常见的属性需要熟悉理解:
Clear Flags :确定将清除屏幕的哪些部分。使用多个摄像机来绘制不同游戏元素时,这会很方便。
实际上是用来清除缓存区中信息,将空白部分使用何种方式进行填充,这个可以理解成背景的显示类型。
**Background:**在绘制视图中的所有元素之后但没有天空盒的情况下,应用于剩余屏幕部分的颜色。
**Culling Mask:**包含或忽略要由摄像机渲染的对象层。在检视面板中将层分配到对象
❗这个比较重要,可以用来屏蔽指定layout 不被渲染,✔为渲染,反之亦然。
**Clipping Planes:**开始和停止渲染位置到摄像机的距离。
**Target Texture:**引用将包含摄像机视图输出的渲染纹理。设置此引用将禁用此摄像机的渲染到屏幕功能。
当指定了texture时,将不会使用此摄像机作为屏幕渲染,渲染信息将实时存储到指定texture对象中。

RT(Render Texture)

右键即可快速创建一个空Render Texture。
image.png
⚪在较老远版本中,NGUI 中Sample Texture可以直接对RT进行调用。
?但在现在这个UGUI的时代,必须使用不同的方式来完成
创建一个Material,使用内置shader来,而RT 作为一个贴图传递给材质,材质又传递给UGUI的Image组件,如此便能够将摄像机的渲染信息显示在场景中的指定区域。

1.指定摄像机Target Texture

image.png

2.新建Material,并且选择RT

image.png

3.在场景Image组件上调用

image.png

基本的一个根据摄像机实时变化的贴图就制作完成了。


Question:

❓如何使得背景透明?
这是一个比较让人忽视掉的坑。
那么将Clear Flags 设置为Solid Color,Backgroud的透明度置为0不就行了吗?
image.png
实际上并没有任何用处?

Cause:

  • 因为RT的Color Fomat刚建立的默认值有问题,颜色格式没有透明度信息。
  • 使用的Shader渲染没有开启深度写入,不能渲染透明度

Solution:

设置RT的Color Fomat,为:
image.png
其实根据OpenGL的命名规范,只要是RxGxAx_XXXX的颜色格式都包含透明度信息。

shader改用默认的
image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享