47. 2023-02-12周总结

主要工作内容

  1. 打包流程优化
  2. 性能优化问题
  3. PlayableAsset returned a null Playable on Instantiate

打包流程优化

之前我们打包时候所需要执行的一些自定义操作都是基于Unity的IPreprocessBuildWithReport这个接口的。但是会有几个问题:

  1. 一定要调用BuildPipeline.BuildPlayer,我们自定义的操作才能执行,但有时候我们不需要打整包,比如说只打热更资源包
  2. 有些SDK也会继承这个接口,但是他们的Order可能与我们这边的Order不兼容,有可能我们希望他的操作在我们的操作处理之后执行,这时候就需要手动去改他们的Order

所以我们把打包自定义操作抽出来自己重新设计了一套结构,结构跟IPreprocessBuildWithReport差不多,也是继承一个接口,实现接口即可。

同时把自定义操作归类,比如这个操作是属于打热更包还是打整包的,还是都需要的,这样就可以方便在不同的打包流程中插入所需要的自定义操作了,同时也不会影响SDK自己的操作

性能优化

我们有个角色场景有性能问题,逐个排查有几个问题:

  1. 渲染批次有点高
  2. 特效有问题

渲染批次问题

一个是静态合批没做,遇到的问题我们用的是预制体来加载整个角色显示,而预制体是做不了合批的,最后做法是改用场景来做角色显示,并以附加场景的形式显示到场景中。

第二个问题是开启了实时阴影,角色是一定要开启实时阴影的,但是场景中的静态物体其实是可以通过烘培的形式去做阴影。

特效问题

特效主要的问题还是粒子数比较多,我们找到一些特效问题比较大的特效,每个都进行优化,性能单独看都得到了一定的提升。

整体优化之后单独看都有一定的提升,但最终放在一起看效果还不是非常明显,需要再继续看看什么问题导致

PlayableAsset returned a null Playable on Instantiate

打包流程优化之后,打出来的包所有用到Timeline的地方都报了这个错误,查了下资料,说可能Timeline的代码被Strip了。

但是我通过<assembly fullname = "UnityEngine.Timeline" preserve = "all"/>方式加入link.xml之后,还是报这个错误。

最后我在启动场景随便挂了一个Timeline进去,问题临时解决,应该还是Strip问题。后面再看看为啥加了link.xml没用