关于AB包中的 Sprite Mask 在打iOS包后失效的问题(适用于各种脚本在打包后失效)

解决方法

  1. 打开游戏进入失效脚本所在页面后搜索Log,如果有Could not produce class with ID XXX
    类似字样,则适用于本问题

  2. 解决方法有3种:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值