6

Unity 2018发布在iOS 16.3偶尔出现画面不动的问题

 1 year ago
source link: https://blog.uwa4d.com/archives/TechSharing_351.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1)Unity 2018发布在iOS 16.3偶尔出现画面不动的问题
2)IL2CPP在Xcode下增量编译问题
3)帧同步实现PuppetMaster布娃娃系统的问题


这是第351篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com
UWA QQ群:465082844

Platform

Q:Unity 2018发布在iOS 16.3偶尔出现画面不动的问题。

项目持续时间很长了,还是用的2018版本。随着新iOS系统推出,这种反馈也越来越多,大部分都是出现在iOS 16.3.x。

具体表现是:画面完全不动,也不接收任何输入事件,像是渲染停了,但是逻辑还是正常,还在播放声音,刷怪之类的。

手上的iOS设备重现不了,也就没法调试。不知道是哪一块可能有问题,希望有遇到过的朋友分享经验,不胜感激。

A:之前在社区上也看到过跟上面这个情况是一样的问答,因为只有外网玩家反馈,公司的设备都不能重现,所以也不好定位。

要是能知道是Shader报错,那还能调试,参考这个:
https://zhuanlan.zhihu.com/p/335293011

感谢zlfeng@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/64ad14019e99796cd233a4d4


Build

Q:最近在研究加速打包问题,发现IL2CPP生成代码之后每次Xcode都是全量编译(直接build而不是clean+archive)。

我参考了以下信息:
https://forum.unity.com/threads/incremental-builds-for-il2cpp.365470/

对比了下如果C#代码没有变化,生成的CPP代码的内容确实不变。但是重新生成貌似会导致文件修改时间变化或别的属性变化,Xcode依然是所有都编译了一遍。

这块有什么经验吗?

A1:我之前的做法是细化打包策略,资源打包细分为差不多10个步骤:对UI、特效、Lua(分三块:Core、模块和LuaTable配置),C#层Config、角色、场景、编译工程、资源覆盖、快速编译、生成APK/IPA和云真机测试等,组织成不同的打包命令提供给CI。

如果是C#代码没变化,可以只做资源类的打包,对需要重新(此处可增量)打包的AssetBundle、Lua、Config等打包,打包后直接覆盖到Xcode工程,直接生成IPA包,跳过中间环节。

构建过程可以细化到很细,如果你是Lua侧,那估计只需要打包Lua模块相关,1分钟内就可以出到IPA包。

如果是Xcode代码也发生变化,这个可以结合Ccache进行提速。

资源打包可以做分布式打包,多台黑苹果去打包各个模块的资源。再传递到版本机上整合,这个过程也可以Hook Svn/Git的资源提交,在提交后做一次打包,再次发布的时候可以增量处理。

其实可以脱离AssetBundle,把量产资源采用非AssetBundle的方式进行组织。避开不必要的导入导出及打包。

感谢debugger@UWA问答社区提供了回答

A2:2年多前,刚好处理过这个问题,当时用的Ccache来缓存Xcode编译的中间产物,在打包后处理修改预处理文件Classes/Preprocessor.h的修改时间,在加速效果上是明显的,缩短了一半多的时间。

感谢海桐@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5b90ebbb670c1a61c64d6cd3


Physics

Q:项目中用PuppetMaster插件做布娃娃效果,模拟障碍击打等等各种效果。目前服务器是基于状态同步实现,但同步量太大,考虑修改为帧同步的方式,但是PuppetMaster中大量使用了刚体组件、Joint组件去模拟各种效果。帧同步中刚体这块有什么办法实现吗?

A:如果是做帧同步,表现层和逻辑层一定要做分离。简单看了一下PuppetMaste这个插件,不太确定但是大概率是基于PhysX实现的,我们自己测试PhysX在相通平台(iOS或者Android)经过一些处理是基本可以保证一致性的,但是iOS和Android上我们测试出过非常明确的不一致现象,所以如果要做移动端跨平台的游戏,帧同步所管理的逻辑层最好不要使用PhysX物理引擎,否则无法保证最终的一致性。

当然,这里还要看题主的游戏类型,如果比较简单,而且每局很短时间,也许不一致的结果可控,可以尝试一下。整体上不推荐把这个插件做到帧同步的逻辑内,成本比较高。

感谢贾伟昊@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/648718bd47691b75be04aab4

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK