解决方法

  1. 打开游戏进入失效脚本所在页面后搜索Log,如果有Could not produce class with ID XXX

类似字样,则适用于本问题

  1. 解决方法有3种:

    1. 点掉Player Settings->Other Settings->Strip Engine Code的对勾再重新打包(不推荐)
    2. 在Scene中找个没影响的地方加入这个脚本(加入脚本就行,不用其他配置)再打包(不推荐)
    3. 在[http://docs.unity3d.com/Manua...]()里找到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文件夹下的文件,重新打包即可。


枢机主教
68 声望4 粉丝

iOS转型的Unity程序员