解决方法
-
打开游戏进入失效脚本所在页面后搜索Log,如果有
Could not produce class with ID XXX
类似字样,则适用于本问题 -
解决方法有3种:
- 点掉Player Settings->Other Settings->Strip Engine Code的对勾再重新打包(不推荐)
- 在Scene中找个没影响的地方加入这个脚本(加入脚本就行,不用其他配置)再打包(不推荐)
- 在http://docs.unity3d.com/Manual/ClassIDReference.html里找到ID 所对应的类名,然后在Assets里加入一个Link.xml再打包(推荐)
Link.xml内容如下(以 ID 331为例):
<linker> <assembly fullname="UnityEngine"> <type fullname="UnityEngine.SpriteMask" preserve="all"/> </assembly> </linker>
原因
-
这是由于你在Player Settings->Other Settings->Strip Engine Code里打钩了。这个选项顾名思义,是允许Unity在打包时候剥离一部分的代码以节省空间。你的脚本没有生效是因为它在这个时候给剥离掉了。
-
那么如何让系统不剥离呢?第一个方法是不用AB包加载,直接在Scene里面放一个被剥离脚本,这样在编译时系统就会检测到你用了这个脚本,便自动添加成例外,不再剥离。在iOS工程中,这一点反映在TypesInScenes.xml文件里。
-
不过更正规的方法是用Link.xml,让添加Strip的例外脚本,简单又干净。在iOS工程中Strip例外的脚本都会存在EditorToUnityLinkerData.json里。
其他
如果采用了以上方法后发现Xcode工程启动即闪退,那么删除工程中Classes->Natice文件夹下的文件和Data文件夹下的文件,重新打包即可。