Unity Sprite 与 Image 有什么区别?

前言

最近在做一个 2D 游戏,用到了 Sprite 与 Image。UI 界面使用 Image ,游戏场景相关制作使用 Sprite。后来跟小伙伴交流的时候,提到了这一点,说到具体原理,我记得是渲染方式不同,Image 的渲染方式是 Canvas Renderer;Sprite 的渲染方式是 Sprite Renderer,至于具体为什么要使用,一知半解。

异同

1.都是使用一个 Sprite 源进行渲染,而 Image 需要位于 Canvas 下才能显示出来。

2.场景中的 Sprite 可以像普通的 3D 游戏物体一样处理,通过 Transform 组件进行移动,旋转等操作;而 Image 则使用 RectTransform 进行布局,以便通过 Canvas 统一管理,RectTransform 可以设置大小,对齐方式等。

3.同一 Canvas 下 不同的 Image 的渲染顺序是根据 Image 在 Hierarchy 的上下顺序渲染的,上面的先被渲染,下面的后被渲染;不同的 Sprite 是根据 Order in Layer 数值的大小渲染的,数值小的先被渲染,数值大的后被渲染。

4.Image 和 Sprite 都可以引用 Material; 都可以通过 Color 修改颜色;如果想对图片进行拉伸,而不影响图片的显示, Sprite 可以通过 DrawMode 修改渲染模式,Image 则是通过 Image Type 修改 Image 的显示方式。

Sprite Inspector

Sprite Inspector

Image Inspector

Image Inspector

5.不同的屏幕分辨率下,Image 可能会 Canvas 改变显示位置和实际大小。就做的 2D 项目来说,我一开始用 Image 显示游戏内元素,需要调整的东西很多,比如 不同游戏元素的相对 Scale ,自身 Position 等,使用 Sprite 的话,根据原图设置的Pixels Per Unit 的值 修改 Sprite 的 Camera 自身属性的 Orthgraphic 的 Size 就好。

6.渲染上, Sprite 使用 SpriteRenderer 组件渲染,而 Image 则由 CanvasRenderer 组件渲染,在视觉上没有任何区别。默认的渲染也都是在 Transparent Geometry 队列中。 而在引擎的处理上,两者则有很大的不同。将 Wireframe 选项打开然后在场景中观察,就可以清楚地发现,Image 会为一个矩形的 Sprite 生成两个三角形拼成的矩形几何体,而 Sprite 则会根据显示内容,裁剪掉元素中的大部分透明区域,最终生成的几何体可能会有比较复杂的顶点结构。

如何选择使用

在 2D 游戏开发中,游戏场景中的元素,应该尽量使用 Sprite;而 Image 应该仅用于 UI 显示,这样调整起来比较简单。还有一个我觉得比较实际的问题,就是 如果目前 2D 游戏升级为成 3D 游戏,相对来说修改的比较少一些。

结束语

Sprite 与 Image 显示方面可能相差不大,如果游戏元素多的话,在性能方面就会有很大的差距,之后测试去做进一步验证。