Unity2D:Sprite和Image的区别

Sprite和Image区别

面试的时候被问到Sprite和Image的区别,我当时就感觉这有什么区别呢? 后来查了下资料,还是自己无知啊!
下面就具体的区别做个笔记
Image 和Sprite 区别
下图是一个Sprite
Unity2D:Sprite和Image的区别_第1张图片
在Unity中可以在Hirerarchy层右键->2D Object里找到Sprite,那么他们的属性面板有什么区别呢?如下图所示:
Unity2D:Sprite和Image的区别_第2张图片
Unity2D:Sprite和Image的区别_第3张图片
渲染上:
Image 通过UGUI的Image和CanvasRenderer组件组件来渲染
Sprite 通过SpriteRenderer组件来渲染
两者在视觉上没有任何区别(都使用默认材质时)。它们默认的渲染也都是在Transparent Geometry队列中。

使用上:
Image需要位于某个Canvas下才能显示出来。场景中的Sprite可以像普通的3D游戏物体一样对待,通过Transform组件进行移动等操作,而Image则使用RectTransform进行布局,以便通过Canvas统一管理。由于RectTransform可以设置大小、对齐方式等,Image可以说更加方便一点,这也是很多人选择使用Image的原因。
在引擎的处理上:
将Wireframe选项打开然后在场景中观察,就可以清楚地发现,Image为一个矩形的Sprite生成两个三角形拼成的矩形几何体,而Sprite则会根据显示内容,裁剪掉元素中的大部分透明区域,最终生成的几何体可能会有比较复杂的顶点结构。如下图所示:
Wireframe模式下的 Image
Unity2D:Sprite和Image的区别_第4张图片
Wireframe模式下的 Sprite
Unity2D:Sprite和Image的区别_第5张图片

由渲染管线的基本流程进行推断:
1.Sprite由于顶点数据更加复杂,在进行顶点计算时会比Image效率更低;
2.Sprite会比Image执行较多的顶点着色器运算;
3.Image会比Sprite执行更多的片段着色器运算
由于片段着色器是针对每个像素运算,Sprite通过增加顶点而裁剪掉的部分减少了相当多的运算次数,在绝大多数情况下,反而比Image拥有更好的效率(尤其是场景中有大量的2D精灵时)。SpriteRenderer会创建额外的几何体来裁剪掉多余的透明像素区域,从而减少了大量的片段着色器运算,并降低了overdraw;而Image则会创建简单的矩形几何体。随着2D元素数量的增加,这种差别会慢慢明显起来。
因此在2D游戏开发中,游戏场景中的元素,应该尽量使用它去渲染。而Image应该仅用于UI显示(实际上即使不考虑性能原因,由于屏幕分辨率的变化,Image可能会被Canvas改变显示位置和实际大小,如果用于游戏内元素的显示,可能会造成跟预期设计不一致的显示结果,也应该避免使用)。

参考博客:Unity2D:Sprite和Image区别

你可能感兴趣的:(Unity)