关于prefab代码动态调用创建的问题

问题描述:游戏中有很多弹框是根据需要动态加载的,有些很复杂的弹框prefab,动态加载打开会有点卡顿,尝试过预加载,但是预加载没有去解析和初始化资源,所以基本还是没什么效果,依然打开会有点卡顿,不知道各位大佬们有没有好的方案。谢谢!

  1. 拆分prefab
  2. 尝试一下预加载完以后调用一下 prefab.compileCreateFunction() ?

可以在预加载完直接添加到节点上,然后隐藏起来,用的时候再显示出来

一般来说预加载就够了,
但是还是要看预制体里面的脚本代码,

如果脚本代码里面做了操作耗时操作例如,同一时间大量的new 等等,
那就是代码书写问题了,需要根据具体问题做具体策略优化,和prefab加载慢没关系

能否看下prefab脚本的内容

CardDetail.zip (6.9 KB)

你好 代码 和 预制件的节点层次截图 都上传了

好的 ,谢谢提供代码

creator有个规则是这样的,
加载预制体的时候
预制体节点下面挂载的节点,在其节点图片全部加载完毕(发布h5的体现就是 在图片从网上下载完毕)之后,才会展示该预制体。

除预制体第一个界面展示的UI之外,全部都动态加载,就能解决你的问题

另外说一下,即使一个节点active false挂载在prefab下面,也是需要下载完图片才会进入prefab的

这个预制件,我刚开始就是看节点太多,所以那6个属性条,我是根据需求动态加载相应属性条,但是在安卓手机上会出现6个属性条依次从上到下挨个出现的表现,策划不能接受这种表现,所以后来又改成直接全部挂载在预制件中了。 另外你说的,“除预制体第一个界面展示的UI之外,全部都动态加载,就能解决你的问题”, 其实这个预制件首次要展示的就是这样,除了下面红色按钮和node_uplv_info这个节点不需要首次展示,其他都需要。

是啊,属性条既然是第一眼需要展示的,最好就挂载在内部
但是你的这个预制体节点树应该是有办法简化,不然理论上,这么长一大串节点图片加载起来,是一定会卡顿的。

这个节点下面的图片做了合图处理吗,合图会加快点速度

其实图片不多,就几个,做了动态合图,主要是label比较多

可以在chrome上看一下,到低慢在哪了

谢了哈! :grinning: 其实web端很流畅,主要是真机,大概从点击到打开1点几秒

哈哈哈,那一定是label的渲染问题了
label有设置cachemode吗

顺便看下这个prefab加载后的drawcall有多少

我记得之前看过一个帖子,一个老哥做传奇类游戏,存在大量的文本,十分卡顿
你碰到的应该是类似的场景

除了会变化的数字用label,其余 label 可以换成图试试

label的cacheMode动态变化的都是Char,其中有个还是RichText…DC 152…第一次打开稍有卡顿,后面再打开就流畅了

楼上的楼上说的方法也可以,
我还没有针对这么大量的label做过优化,
但是较少label在同一个场景的数量一定有用的
(也许大量静态label做bitmap cache也有用,要你试一试)

唉 这个要说服策划才行。。。。。