乐趣区

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

解决办法

  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 文件夹下的文件,从新打包即可。

退出移动版