UIGrid

加载面板时,如果面板中含有大容量的 UIGrid,可能会很卡。我们可以只加载 UIGrid 的前 n 个单元格对象,在显示面板之后,利用协程加载剩余的所有单元格,每帧加载 m 个。

同样的,含有大容量 UIGrid 的面板,在关闭时,调用 Destroy 函数也会导致卡顿。可以在关闭面板时,将UI面板的摄像机关掉,然后将该面板对象全部收集到LIST中,然后利用协程依次从下到上删除对象,每帧删除 x 个。

如果是不需要排序删除等操作的 UIGrid,感觉可以使用对象池技术,在滑动过程中,只保留显示区域和前后区域的元素,其它销毁。

如果需要排序大容量 UIGrid ,销毁再重新加载 item 肯定是不可取的,而按排序好的列表数据重新给 item 赋值也是比较慢的,可以利用 UIGrid 默认的排序方式(按 item 对象名称进行排序),修改 item 对象名称,然后刷新 UIGrid 即可。通常习惯将 item 对应数据项的主键作为 item 名称,是为了方便查找数据。如果用这种方式,就只能把 item 数据项主键信息存储到子节点中了,比如第一个子节点名,然后通过 item.transform.GetChild(0).gameObject.name 函数获取。

当滑动时,所有的 item 都会重新渲染,会很卡,这时可以在 move 事件里,不断的设置 item 的可见性,只让屏幕中的 item 处于 active = true 状态,这样滑动起来就会很流畅。

不同UI的相机的深度,在渲染顺序中优先级是最高的,depth 值越大,渲染的图像越靠前,与空间无关。

当前 Panel 的实际显示顺序由父级 Panel 深度和自身的深度共同决定。

http://blog.csdn.net/langresser_king/article/details/52818519

1、我们一般把资源和代码作为两个工程。资源工程导出assetbundle供代码工程使用。这么做主要是防止资源过多导致代码工程启动速度慢,影响开发效率。

2、尽量避免使用Resources文件夹。这个文件夹就相当于一个系统默认的AssetBundle。只不过不能增量更新。它会严重影响打包速度。我们把资源从Resources移出来后,打包时间从半个多小时,减少到2~5分钟。

2、Shader都要加入到Proejct Settings--Graphics--Always Included Shaders中。否则代码工程中没有使用到的Shader可能会被裁剪,导致的问题是Shader丢失。

3、Shader要打包到一个AssetBundle中,即Shader需要指定一个AssetBundle包名。如果Shader没有指定的话,那么每个AB包都会包含这个Shader。一方面造成资源浪费。另一方面当Shader被修改的时候,所有的模型都需要重新导出。另外由于我们代码工程里面肯定也维护了一份Shader,模型实际使用的Shader是它自己包内的,不是代码工程的Shader。

这里要注意,2和3必须都要做。之前我认为加入到Always Included Shaders中,Unity打包ab的时候就不会打包Shader。然而并不是这样。这个列表只负责预先加载Shader。防止资源被裁剪,以及临时加载造成的卡顿。

4、Unity打包后的Shader是平台相关的,Editor下是无法直接使用的。所以Editor下加载AB包中的模型或特效会出现Shader错误。这个时候需要重新指定一下Shader,即遍历所有的Render把Material的Shader重新附下值。

打包AssetBundle时,不注意的话,某些Shader是无法打包到AssetBundle中的。这两天一直被这个问题困扰,抽空就研究了一下。

  Unity打包Assetbundle时,要想将Shader一起打包,需要注意两种Shader:项目中自建的Shader文件和Unity内置的Shader文件。自建的Shader文件在Unity项目中是可以看到的,而Unity内置的Shader文件只能在项目中使用,但是项目中找不到这个文件,因为这个文件是在Unity的安装目录中,然后在Unity项目中通过某种映射关系来引用内置Shader。
  So...问题来了...
  项目中自建的Shader文件可以设置AssetBundle名称,然后进行打包,而内置的Shader根本无法设置Assetbundle名称,也就是说一般的打包方法是无法将内置的Shader进行打包的,从而导致使用的内置Shader的材质球,从AssetBundle中加载出来后,会出现材质球丢失的情况。
  对应这个问题的解决方法,我简单研究了一下,打包前可以将Unity的内置Shader设置一下,让Unity自己能够识别到哪些内置Shader是需要被打包出来的。具体方法如下:
  1、依次点击菜单栏的 Edit -> Project Settings -> Graphics,然后在Inspector面板中会出现关于内置Shader的设置(“Built-in shader setting”)和Shader分离设置(“Shader stripping”)。
  2、其中上方的Built-in shader setting的选项就是关于内置Shader的设置,这里只说明关于打包的操作,其中有一个将Always Included Shaders的数组,将需要打包的内置Shader添加在这里即可。例如我要将名为Particles/Additive的内置Shader添加到里面,需要将数组的size增加1,然后在多出来的数组元素中选择Particles/Additive即可。
  这时候再进行打包,就可以将内置Shader包含在打包文件中了。这应该也是Unity打包内置Shader的正确操作了。
  扩展:Shader分离设置(“Shader stripping”)里面主要是关于烘培的灯光贴图打包的设置,一般的操作是:"Lightmap modes"选择"Manual",然后点击下面出现的"From current scene"按钮即可,Unity会更具当前的烘培贴图来自动适配设置。
转:http://blog.csdn.net/u010377179/article/details/52922738

Unity UI相关总结的更多相关文章

  1. 关于 Unity UI 中 GraphicRaycaster.Raycast 数量巨大的问题

    有时候会发现 Unity UI 非常耗时,在 Profiler 中可以轻易的看到 UI 中 的 GraphicRaycaster.Raycast 单帧调用可以成百上千,甚至好几千,帧速率前不忍赌,一关 ...

  2. Unity UI性能优化技巧

    本文将介绍一些提升Unity UI性能的技巧.更多优化技巧,可以观看Unity工程师Ian Dundore在Unite Europe 2017的演讲<使用Unity性能提升技巧>. 1.划 ...

  3. unity UI事件

    由于工作需要到持续按键,所以了解了一下unity UI事件,本文主要转载于http://www.cnblogs.com/zou90512/p/3995932.html?utm_source=tuico ...

  4. Unity UI on the HoloLens

    Following the steps under "Required configuration" will allow Unity UI to continue to work ...

  5. Unity UI 基础【译】

    https://unity3d.com/cn/learn/tutorials/topics/best-practices/fundamentals-unity-ui?playlist=30089 理解 ...

  6. unity UI如何开启(显示)或者关闭(隐藏)Panel界面最好?

    https://segmentfault.com/a/1190000012357091 unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢? 可能大家 ...

  7. Android UI相关开源项目库汇总

    最近做了一个Android UI相关开源项目库汇总,里面集合了OpenDigg 上的优质的Android开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个st ...

  8. Unity UI大小动态设置(Resize Unity UI RectTransform)

    我们在开发过程中发现,要调整Unity UI元素的大小,RectTransform提供了sizeDelta属性可以用来动态修改RectTransform的大小,但同时我们也google到另外一个修改R ...

  9. Android开发中UI相关的问题总结

    UI设计和实现是Android开发中必不可少的部分,UI做不好的话,丑到爆,APP性能再好,估计也不会有多少人用吧,而且如果UI和业务代码逻辑中间没有处理好,也会很影响APP的性能的.稍微总结一下,开 ...

随机推荐

  1. java程序中实现打开 某个指定浏览器

    package com.test; import java.lang.reflect.Method; //实现打开浏览器并跳到指定网址的类 public class BareBonesBrowserL ...

  2. 关于RabbitMQ关键性问题的总结

    摘要:本篇是本人对RabbitMQ使用的关键性问题进行的总结,如性能上限.数据存储.集群等, 具体的RabbitMQ概念.安装.使用方法.SpringAMQP配置,假设读者已有了基础. 1.      ...

  3. 控制台获取AngularJS某个元素的Scope

    如何在控制台获取到某个元素的Scope呢? 假设,页面元素为: <label>Name:</label><input type="text" ng-m ...

  4. Linux:FHS标准

    FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数Linux版本采用这种文件组织形式,FHS定义了系统中每个区域的用途.所需要的最小构成的文件 ...

  5. 经验:使用 Cache 时注意 DateTime.Now

    如果使用了缓存,比如方法 A 吧,那么你需要注意 DateTime.Now 对缓存的影响,简单来说,DateTime.Now 可能出现在两个地方: 在调用方,将 DateTime.Now 作为参数传递 ...

  6. log4j配置输出到多个日志文件

    通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中.那么我们log4j为我们提供了这种功能,以下我们来一步一步看是怎么做的.这里以property的配置方式写. ...

  7. Asp.net Core中使用Redis 来保存Session, 读取配置文件

    今天 无意看到Asp.net Core中使用Session ,首先要使用Session就必须添加Microsoft.AspNetCore.Session包,默认Session是只能存去字节,所以如果你 ...

  8. C++ 中的位操作

    定义二进制变量: 一般是以八进制或者十六进制来定义,八进制数以0开头,十六进制数以0x开头 例如int  a = 0x80, 这里的80只能表示8个二进制位,它表示的是int的低8位,前面的24个二进 ...

  9. WIN8 Metro UI 风格下的微软报表开发与设计 Metro UI SSRS - BIWORK

    开篇介绍 作为 BI 系统前端展现的报表,其重要性不言而喻,我们对于一个好的报表的要求也无非主要包含以下几点: 1. 数据完整和正确,数据质量没有问题 2. 友好的清晰的界面,整洁美观,有得体的格式 ...

  10. 1209 -The MySQL server is running with the --read-only option

      1209 - The MySQL server is running with the --read-only option so it cannot execute this statement ...