1)Unity将外围脚本打成DLL是否有性能影响
2)预制物嵌套导致AssetBundleName批改后对母预制物失落援用
3)真人真机测试报告中AB.LoadFromFile耗时较高
4)如何剔除掉Shader中某一个Pass


这是第287篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

Build

Q:Unity将外围脚本打成DLL,比方将某块外围零碎打成DLL后,运行时调用DLL是否有性能影响?

A1:没有影响,Unity默认就是会帮你将C#代码给生成DLL。如果打包到Android或者iOS,当初都会再将DLL用IL2CPP转成CPP代码。

感激liu@UWA问答社区提供了答复

A2:当初Unity各平台根本都是用IL2CPP,应用IL2CPP开始构建时,Unity会主动执行以下步骤:

  1. 将Unity Scripting API代码编译为惯例 .NET DLL(托管程序集)。
  2. 利用托管字节码剥离。此步骤可显著减小构建的游戏大小。
  3. 将所有托管程序集转换为规范C++代码。
  4. 应用本机平台编译器编译生成的C++代码和IL2CPP的运行时局部。
  5. 将代码链接到可执行文件或DLL,具体取决于指标平台。<br/>

以上摘自Unity官网文档,以便题主了解。<br/>
IL2CPP官网文档:https://docs.unity.cn/cn/curr...

感激郑骁@UWA问答社区提供了答复

AssetBundle

Q:Unity 2020.3.16预制物嵌套时,子预制物援用的图片AssetBundleName批改后,母预制物会失落援用。

举例来说,预制物A中有个预制物B,而后预制物B上的RawImage援用图片C。ABC三个打到不同AssetBundle中。

首次打包,加载全副AssetBundle,实例化A,A显示失常。

批改图片C包名,再次打包,A所在包不会有变动。然而加载全副AssetBundle,实例化A,A会失落C的援用。

反编译AssetBundle会发现,理论预制物A所在资源包数据中有图片C的援用数据,然而因为二次打包A包无变动,就没有更新C所在包的数据。

这个问题降级Unity是否能够解决?或者在以后版本是否能够避开?

反编译AssetBundle会发现A所在Bundle会间接以External References模式关联到图片C的地址,并且AssetBundle也会依赖到图片C所在Bundle(然而不依赖到嵌套Prefab B所在Bundle)。

Prefab B从新关联图片D再打包,A援用会失常刷新。然而仅仅批改图片C的BundleName再打包,不会触发A从新打包。

AssetBundle的Manifest显示的A和B依赖关系是不正确的,显示还是A依赖B,B依赖C,和理论解包进去的不一样。

当初曾经用追踪Prefab嵌套树,外加资源BundleName监督的流程临时解决了打包问题。然而还是心愿能取得更标准的解决方案。

A:Unity Prefab嵌套目前只解决了Editor局部,打包AssetBundle时,会将Subprefab的序列化文件局部copy一份到Rootprefab,其实就等于AssetBundle环境下,嵌套Prefab不失效。

感激郑骁@UWA问答社区提供了答复

AssetBundle

Q:如下图所示,在报告中常留神到资源管理模块中AB.LoadFromFile单次调用耗时较高(几十甚至几百毫秒),且不同AssetBundle包加载耗时差距较大,请问是什么起因导致的?

A:实践上,当应用LZ4压缩的AssetBundle包加载时只须要加载头文件,不应该须要如此大量的耗时。猜想是应用了LZMA的打包形式导致的。

试验将10张、50张纹理别离用LZMA、LZ4打包,屡次测试取中位数,失去AssetBundle加载耗时如下图,根本合乎预测。

其中,LZMA加载AssetBundle须要同时进行解压,耗时与AssetBundle中资源大小相干(如图1,正好成5倍关系);所以会产生报告中不同AssetBundle包加载耗时差距较大的景象。

而LZ4加载仅需加载头文件,耗时极低。

LZMA打包形式


LZ4打包形式

感激Faust@UWA问答社区提供了答复

Shader

Q:如何在公布APK的时候,利用代码主动剔除掉Shader中某一些Pass?心愿这些Pass在Editor环境下能够应用,而在APK包中敞开,这样能够缩小变体构建工夫。

A:通过ShaderSnippetData提供的PassName匹配想要剔除的PassName就能够了。

感激题主墙外行人@UWA问答社区提供了答复

封面图来源于网络


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官网技术QQ群:793972859(原群已满员)