A:在进行单元测试中,在一个空项目中打包uber.shader,发现打包后,变体正确。但是开发项目和打包项目依旧生成不正确。怀疑是Unity缓存原因。于是删除Library目录下shaderCache,再次打包,还是不正确。再次删除已生成的AssetBundle资源,完全重新生成,终于正确。 所以multi_compile定义的关键字打包出现问题,需要删除缓存和已生成的AssetBundle才能最终正确生成新的AssetBundle。
A1:经查,是我这边的纹理资源导入后处理脚本(iOS)有问题,但是其在Unity 2018下不会体现出来,但是在Unity 2019中会直接让某些贴图的导入工作无法完成。由于使用了 Unity Accelerator(也就是Asset Pipeline v2对应的缓存服务器),重新导入也不会生成新的缓存,只能让进行重新导入的项目局部正常。 我们的导入后处理脚本中在iOS下,对JPG单独使用了不带透明通道的ATSC压缩。在Unity 2019中,ATSC压缩不再区分是否带透明通道。修改脚本+删除Unity Accelerator缓存+重新导入某个Working copy(同时也重建了缓存)可解决。 注意:上述无法导入完成的情况,打出包来会有两个明显的问题:包体变大、图片模糊。
A:开始排查问题:首先定位到崩溃的资源,是TMPTextPro相关的字体资源包(复合包,包含了多个资源内容)。 验证BuildAssetBundleOptions.DisableWriteTypeTree的影响,屏蔽BuildAssetBundleOptions.DisableWriteTypeTree打包参数。打包后编辑器运行不崩溃,肯定了该参数造成的问题。(这里当时猜测是Unity内部代码的某个宏导致的,导致了在Editor下和发布时走了不同的解析代码,但是又没有源代码,无法具体验证。) 开始排除问题: 首先排除Unity的编辑器缓存造成的该问题,重置后依旧崩溃。 开始拆解问题包,将所有资源内容单个打包(一个资源对应一个包)。最后精确定位到是TMPTextPro的字体FontAsset资源包调用AssetBundle.LoadAsset()方法时崩溃。 分析问题:设置DisableWriteTypeTree参数将不在AssetBundle中包含相关的文件TypeTree信息,是因为没有该信息后导致的反序列化不正确,为什么其它资源能正常解析,就单单FontAsset会出现问题?打开TMP_FontAsset.cs源码,查看发现这么一段代码。
发现它居然在可序列化类中加入了条件编译,造成导出运行和编辑器运行该类的实现不一样。 这就是为什么导出包运行正确,编辑器崩溃的原因。因为AssetBundle打包时的UNITY_EDITOR是不成立的,会设置对应平台的宏。所以打包时FontAsset资源的数据是不包含m_SourceFontFile_EditorRef该属性的序列化信息,未开启DisableWriteTypeTree时,因为有TypeTree信息,编辑下运行程序能通过TypeTree信息正确反序列化,当设置DisableWriteTypeTree时,反序列化失败,直接崩溃。 解决:给属性m_SourceFontFile_EditorRef添加标签[NonSerialized],再对应修改一些Editor代码,让功能在Editor下也正确。
A1:实践下来,建议还是用CommandBuffer来操作,比较灵活: 1. OnPreRender阶段先设置好TargetBuffer(ColorBuffer:RTA、DepthBuffer:RTB)。 2. 使用CommandBuffer在CameraEvent.BeforeImageEffects或者AfterImageEffects这个事件上做所有的后处理。 3. 核心在于第一次Blit的Source为ColorBuffer,最后一次Blit的Destination为BuiltinRenderTextureType.CameraTarget,中间可以穿插任何后处理效果。
而且如果发现改了ColorBuffer的分辨率,画面没有正常缩放,需要第二步后处理的CameraEvent改为AfterEverything:
还有就是如果改了TargetBuffer,需要对SceneCamera做特殊处理。
A2:下图是这两种方法的实验对比,至于两者区别的根本原因,是其方法内部实现的差异:SetTargetBuffers的实现过程是没有设置渲染目标(也就是屏幕)的RenderTexture的,这也就是为何用该方法时OnRenderImage中的Source是null。
A:建议设置为True。相同顶点会被合并,可以减少内存和Mesh渲染的压力。
您需要 登录 才可以下载或查看,没有账号?立即注册
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )
GMT+8, 2024-11-17 02:37 , Processed in 0.092164 second(s), 26 queries .
Powered by Discuz! X3.5 Licensed
© 2001-2024 Discuz! Team.