SpriteRenderer和Image组件的区别

  1. 渲染上:
    (1)Image 通过UGUI的Image和CanvasRenderer组件组件来渲染;
    (2)Sprite 通过SpriteRenderer组件来渲染;
    (3)两者在视觉上没有任何区别(都使用默认材质时)。它们默认的渲染也都是在Transparent Geometry队列中。
  2. 原理上:
    (1)GPU接收到DrawCall指令后,通过一系列流程生成最终要显示的内容并进行渲染,其中大致的步骤包括:
    a. CPU发送Draw Call指令给GPU;
    b. GPU读取必要的数据到自己的显存;
    c. GPU通过顶点着色器(vertex shader)等步骤将输入的几何体信息转化为像素点数据;
    d. 每个像素都通过片段着色器(fragment shader)处理后写入帧缓存;
    e. 当全部计算完成后,GPU将帧缓存内容显示在屏幕上。
    (2)通过上面的认知,我们可以推断:
    a. Sprite由于顶点数据更加复杂,进行顶点计算时在第1、2步会比Image效率更低;
    b. Sprite会比Image执行较多的顶点着色器运算;
    c. Image会比Sprite执行更多的片段着色器运算;
  3. 使用上:
    (1)Hierarchy窗口,可以把sprite随便放在哪,通过Transform移动其它游戏物体那样移动sprite; Image必须放在Canvas下面, 且只能通过RectTransform在UI界面中移动;
    (2)sprite和Image的一个最重要的区别在于sprite支持网格的自动构造,而UI Image的网格始终由矩形构成;SpriteRenderer会创建额外的几何体来裁剪掉多余的透明像素区域,从而减少了大量的片段着色器运算,并降低了overdraw。SpriteRenderer确实是经过优化以显示更多的元素的。所以在2D游戏开发中,游戏场景中的元素,应该尽量使用它去渲染,尤其时复杂的几何图像;
    (3)Image仅用于UI显示;

参考文章:Unity UGUI系列二 材质 SpriteRenderer和Image

猜你喜欢

转载自blog.csdn.net/weixin_42205218/article/details/126505875