游戏开发中 Sprite 和 Image 的区别

在开发中,有的时候会遇到一些奇奇怪怪的问题,比如说在3D游戏开发中需要制作一个 主角血条或者 敌人血条的时候,一般来说有两种方式,一个是 使用 Canvas 制作一张 Image 进行渲染,一个是使用 SpriteRenderer 进行渲染,如果使用 Image进行渲染的话每一个敌人都得引用一个 Image进行实时的渲染,那么可能效果上没有区别,但是本质上却又很多的差异;
Image:使用 Canvas Renderer进行渲染,
Sprite Renderer:本质是一张半透明的 texture。在导入的时候被设置成为 Sprite,是被渲染到 2D / 3D 场景或者其他界面的图片。
两者在视觉上没有任何区别(都使用默认材质时)。它们默认的渲染也都是在Transparent Geometry队列中。
在场景中,你 的 Sprite 可以随便的进行摆放,但是你 的 Image 不得不放在 Canvas 下边,这样来看的话,Image 有了一些的局限性,继续往下边走,Sprite和Image的一个最重要的区别在于Sprites支持网格的自动构造,而UI Image的网格始终由矩形构成。
在这里插入图片描述
                                                                       Sprite                                   Image

上图中可以看到,UI Image创造了一个紧密的矩形来包裹Sprite,而SpriteRenderer创造了一个能更好匹配将要渲染的sprite的网格。
Sprite由于顶点数据更加复杂,在进行顶点计算时会比Image效率更低;
Sprite会比Image执行较多的顶点着色器运算;
Image会比Sprite执行更多的片段着色器运算
由于片段着色器是针对每个像素运算,Sprite通过增加顶点而裁剪掉的部分减少了相当多的运算次数,在绝大多数情况下,反而比Image拥有更好的效率(尤其是场景中有大量的2D精灵时)。SpriteRenderer会创建额外的几何体来裁剪掉多余的透明像素区域,从而减少了大量的片段着色器运算,并降低了overdraw;而Image则会创建简单的矩形几何体。随着2D元素数量的增加,这种差别会慢慢明显起来。
因此在2D游戏开发中,游戏场景中的元素,应该尽量使用它去渲染。而Image应该仅用于UI显示(实际上即使不考虑性能原因,由于屏幕分辨率的变化,Image可能会被Canvas改变显示位置和实际大小,如果用于游戏内元素的显示,可能会造成跟预期设计不一致的显示结果,也应该避免使用)。
回到主题,SpriteRenderer和UI Image之间的区别是什么?显而易见,sprites的开销更大,因为它的几何数据更复杂。但是如果我告诉你顶点操作通常比片元操作开销小的多呢?尤其对于移动设备和半透明对象。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Unity,RawImageImageSprite是三种不同的组件,它们有一些区别。 首先,渲染上的区别Image和RawImage都是通过UGUI的Image和CanvasRenderer组件来渲染的,而Sprite则是通过SpriteRenderer组件来渲染的。在视觉上,它们没有任何区别(都使用默认材质时),并且它们默认的渲染都是在Transparent Geometry队列。 其次,使用方式的区别Image和RawImage主要用于UI显示,而Sprite主要用于游戏场景的元素渲染。在2D游戏开发,应该尽量使用Sprite去渲染游戏场景的元素,因为Sprite会创建额外的几何体来裁剪掉多余的透明像素区域,从而减少了大量的片段着色器运算,并降低了overdraw。而Image应该仅用于UI显示,因为它可能会被Canvas改变显示位置和实际大小,可能会造成跟预期设计不一致的显示结果。 最后,性能上的区别。由于Sprite的顶点数据更加复杂,在进行顶点计算时会比Image效率更低。但是在大量2D精灵存在的场景Sprite反而比Image拥有更好的效率,因为Sprite通过增加顶点而裁剪掉的部分减少了相当多的运算次数。而Image执行更多的片段着色器运算,因为它是针对每个像素运算的。随着2D元素数量的增加,这种差别会逐渐明显起来。 综上所述,Unity的RawImageImageSprite在渲染方式、使用方式和性能上都有一些区别。根据具体的需求和场景,选择合适的组件来使用。 #### 引用[.reference_title] - *1* *3* [Unity2D:SpriteImage区别](https://blog.csdn.net/a435931517/article/details/84564155)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [unity如何把RawImage的RenderTure图片转化成Sprite](https://blog.csdn.net/lucky_XiaoZhang/article/details/128004985)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值