Unity UGUI5——图集

这篇具有很好参考价值的文章主要介绍了Unity UGUI5——图集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Drawcall

​ 字面理解 DrawCall,就是绘制呼叫的意思,表示 CPU(中央处理器)通知 GPU(图形处理器-显卡)

(一)DrawCall 概念


就是 CPU (处理器)准备好渲染数据(顶点,纹理,法线,Shader 等等)后
告知 GPU(图形处理器-显卡)开始渲染(将命令放入命令缓冲区)的命令

​ 简单来说:一次 DrawCall 就是 CPU 准备好渲染数据通知 GPU 渲染的这个过程

​ 如果游戏中 DrawCall 数量较高会影响 CPU 的效率,最直接的感受就是游戏会卡顿

(二)举例说明

​ 以拷贝文件来进行类比

​ 假设我们创建 10000 个小文件,每个文件大小为1kb,然后把这些文件拷贝到另一个文件夹中

​ 你会发现,即使这些文件加起来不超过 10MB,但是拷贝花费的时间是很长的

​ 如果我们单独创建 1 个 10MB 的文件拷贝到另一个文件夹,基本可以瞬间拷贝完毕

​ 为什么会这样呢?

​ 因为每一个文件赋值动作都需要很多额外的操作,比如分配内存,创建数据等等

​ 这些操作就会带来一些额外的性能开销

​ 简单理解:文件越多额外开销就越大

​ 渲染过程和上面的例子很类似,每次 DrawCall,CPU 都需要准备很多数据发送给 GPU

​ 那么如果 DrawCall 越多那么额外开销就越大,其实 GPU 的渲染效率是很强大的,往往影响渲染效率的

​ 都是因为 CPU 提交命令的速度

​ 如果 DrawCall 太多,CPU 就会把大量时间花在提交 DrawCall 上,造成 CPU 过载,游戏卡顿

(三)如何降低 DrawCall 数量

​ 在 UI 层面上:小图合大图,使用图集

​ 即多个小 DrawCall 变一次大 DrawCall

(四)制作 UI 时降低 DrawCall 的技巧

  1. 注意不同图集之间的层级关系

  2. 注意 Label 的层级关系

二、图集

​ UGUI 和 NGUI 使用上最大的不同是:NGUI 使用前就要打图集,UGUI 可以再之后再打图集

​ 打图集的目的就是减少 DrawCall,提高性能

​ 简单回顾 DrawCall

​ DC 就是 CPU 通知 GPU 进行一次渲染的命令

​ 如果 DC 次数较多会导致游戏卡顿

​ 我们可以通过打图集,将小图合并成大图,将本应 n 次的 DC 变成 1 次 DC 来提高性能

(一)在 Unity 中打开自带的打图集功能

​ 在工程设置面板中打开功能
​ Edit --> Project Setting --> Editor
​ Sprite Packer(精灵包装器,可以通过 Unity 自带图集工具生成图集)

ugui 图集加载,Unity,unity,游戏引擎

  • Disabled:默认设置,不会打包图集

  • Enabled For Builds(Legacy Sprite Packer):Unity 仅在构建时打包图集,在编辑模式下不会打包图集

  • Always Enabled(Legacy Sprite Packer):Unity 在构建时打包图集,在编辑模式下运行前会打包图集

    Legacy Sprite Packer:传统打包模式,相对下面两种模式来说,多了一个设置图片之间的间隔距离

    • Padding Power:选择打包算法在计算打包的精灵之间以及精灵与生成的图集边缘之间的间隔距离,这里的数字代表 2 的 n 次方
  • Enabled For Build:Unity 进在构建时打包图集,在编辑器模式下不会打包

  • Always Enabled:Unity 在构建时打包图集,在编辑模式下运行前会打包图集(常使用)

(三)打图集参数注意

​ 在 Project 窗口中右键选择 Create --> Sprite Atlas,创建图集

ugui 图集加载,Unity,unity,游戏引擎
ugui 图集加载,Unity,unity,游戏引擎

(四)查看 Drawcall

​ 默认有 2 次 Drawcall

ugui 图集加载,Unity,unity,游戏引擎文章来源地址https://www.toymoban.com/news/detail-618546.html

(五)代码加载

// 加载图集 注意:需要引用命名空间
SpriteAtlas sa = Resources.Load<SpriteAtlas>("MyAlas");
// 从图集中加载指定名字的小图
sa.GetSprite("bk");

到了这里,关于Unity UGUI5——图集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity UGUI 滚动列表

    效果: 当前用的 Unity 版本为 5.6.7f1,场景分辨率为 1440 * 2560,下面的案例中,都是以这个分辨率为标准,如果你设置的屏幕大小和我的不一样,那么在后面的操作中,参数可能会不一样。 添加完成后,场景界面如下    如下 将 Content 的大小调整一下 在场景中的显示如下 将

    2024年02月02日
    浏览(32)
  • Unity使用UGUI划线

    Unity 里面虽然提供Linerender绘制线条,但是只能在3D空间划线,有时候需要在UI上绘制指定的线条,柱状图,饼状图等就可以采用下面的方式了。   创建DrawLine,继承MaskableGraphic类,重写OnPopulateMesh(VertexHelper vh)方法,重新使用mesh绘制线条。添加网格顶点实现画线。

    2024年02月08日
    浏览(23)
  • Unity基础UGUI学习

    使用 UGUI来开发UI,离不开Canvas组件,所有的 UI 元素,一般都是放在包含 Canvas 组件的节点。 Canvas组件都有那些属性? RenderMode: 渲染模式,大概有三种: Screen Space - Overlay: 覆盖屏幕,Canvas 永远覆盖在场景中的其它所有元素的上层。 Pixel Perfect: UI元素精确到像素对齐,边

    2024年02月01日
    浏览(28)
  • Unity UI——UGUI

    包名: com.unity.ugui Canvas :   容纳所有UI元素的区域。   一种带有画布组件的游戏对象。   使用EventSystem对象来协助消息系统。 绘制顺序: 按照在 Hierarchy 中显示的顺序绘制,由上到下。 如果两个 UI 元素重叠,则后一个元素将显示在前一个元素之上 渲染模式:(Render Mode)

    2024年04月28日
    浏览(27)
  • unity UGUI 九宫格 拉伸

    1.sprite Mode :选择 Multiple ,点击 Apply,如下图:  2.点击 sprite Editor,调节合适的值即可。

    2024年02月12日
    浏览(28)
  • unity -- UGUI插件 LoopScrollRect

    目录 一.简介 二.注意事项 1. 预制体设计: 2. 性能问题: 3. 数据更新: 4. 交互体验: 5. 版本兼容性: 6. 项目内容变化: 7. 异步加载: 8. 点击事件处理: 9. 动态布局: 10. 多语言支持: 三.使用示例  1.LoopScrollRect常用功能示例: 2.动态添加数据 四:下载插件 一.简介 LoopS

    2024年02月16日
    浏览(31)
  • Unity DrawCall优化 - UGUI优化

    一、DrawCall是什么? Unity 展示出来的画面,是通过GPU绘制出来,才显示出来的。 在场景中,一个场景内的物体,分几个批次提交给显卡来绘制,就是几个DrawCall。 在Unity中,两个地方可以查看DrawCall, 1.在Game视口,的Stats,点击一下打开一个窗口,Batches:后面的就是Drawcall值。

    2024年03月13日
    浏览(27)
  • Unity-UGUI-曲线绘制

    在UGUI中,这个修改的顶点单位是实际的像素(比如画布引用分辨率为800x600) 坐标系以Pivot 为原点(0,0)的坐标系,比如你的三角型顶点都在一象限,那么0.5的Pivot 效果就和其他的Image 0.0 的效果一样。 在Unity中绘制UGUI曲线图 在Unity Graph绘制

    2024年02月11日
    浏览(36)
  • Unity UGUI实现点击事件穿透

     代码很简单如下 将此代码挂载到上层节点上即可 使用此方案遇到的一些问题以及处理方法 1.下层Button没响应问题 如果只传递一层的情况 Button的Text文本 或者Button下面有遮挡物 并且Raycast Target是true的情况它会传递给Text或者 其他遮挡物 而Button 不会收到点击消息 所以如果想

    2024年04月09日
    浏览(54)
  • Unity UGUI4——组合控件

    ​ Button 是按钮组件,是 UGUI 中用于处理玩家按钮相关交互的关键组件 ​ 默认创建的 Button由 2 个对象组成 ​ 父对象——Button 组件依附对象,同时挂载了一个 Image 组件作为按钮背景图 ​ 子对象——按钮文本 Text(可选) Interactable:是否接收输入 若不勾选,则表示被禁用,

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包