Unity UGUI 背包物品拖动实现
“这是我参与8月更文挑战的第3天,活动详情查看:[8月更文挑战]”
❓时常思考,有时候游戏中会在同一个屏幕显示多个相机拍摄到的画面,类似于小区监控显示器那样的。那这样的效果肯定是需要多个相机吧,但如何实现的确切方式到底是怎么做到的
Unity 中的 Render Texture 提供了一种简便的方式,无需代码即可实现。
Camera
首先我们需要一个Camera(除了MainCamera),在一个由系统添加的标准Camera中,能看到如下组件
一些使用中常见的属性需要熟悉理解:
Clear Flags :确定将清除屏幕的哪些部分。使用多个摄像机来绘制不同游戏元素时,这会很方便。
实际上是用来清除缓存区中信息,将空白部分使用何种方式进行填充,这个可以理解成背景的显示类型。
**Background:**在绘制视图中的所有元素之后但没有天空盒的情况下,应用于剩余屏幕部分的颜色。
**Culling Mask:**包含或忽略要由摄像机渲染的对象层。在检视面板中将层分配到对象
❗这个比较重要,可以用来屏蔽指定layout 不被渲染,✔为渲染,反之亦然。
**Clipping Planes:**开始和停止渲染位置到摄像机的距离。
**Target Texture:**引用将包含摄像机视图输出的渲染纹理。设置此引用将禁用此摄像机的渲染到屏幕功能。
当指定了texture时,将不会使用此摄像机作为屏幕渲染,渲染信息将实时存储到指定texture对象中。
RT(Render Texture)
右键即可快速创建一个空Render Texture。
⚪在较老远版本中,NGUI 中Sample Texture可以直接对RT进行调用。
?但在现在这个UGUI的时代,必须使用不同的方式来完成
创建一个Material,使用内置shader来,而RT 作为一个贴图传递给材质,材质又传递给UGUI的Image组件,如此便能够将摄像机的渲染信息显示在场景中的指定区域。
1.指定摄像机Target Texture
2.新建Material,并且选择RT
3.在场景Image组件上调用
基本的一个根据摄像机实时变化的贴图就制作完成了。
Question:
❓如何使得背景透明?
这是一个比较让人忽视掉的坑。
那么将Clear Flags 设置为Solid Color,Backgroud的透明度置为0不就行了吗?
实际上并没有任何用处?
Cause:
- 因为RT的Color Fomat刚建立的默认值有问题,颜色格式没有透明度信息。
- 使用的Shader渲染没有开启深度写入,不能渲染透明度
Solution:
设置RT的Color Fomat,为:
其实根据OpenGL的命名规范,只要是RxGxAx_XXXX的颜色格式都包含透明度信息。
shader改用默认的