找回密码
 立即注册
查看: 251|回复: 0

Unity 的 Strip Engine Code

[复制链接]
发表于 2023-1-8 18:12 | 显示全部楼层 |阅读模式
问题描述

项目中新增了 AudioMixer 相关的一些东西,打包之后,包体直接在调用到 AudioMixer 相关的地方闪退。
其它信息:

  • AudioMixer 相关的 assest 会被拆出来作为 Assest Bundle,AudioMixer 相关的代码则正常包含在包体内。
  • 设置中使用了 il2cpp,开启了代码裁剪。
问题分析

刚开始没想到是代码裁剪的问题,而是怀疑自己是不是遇到了资源加载/初始化顺序/Unity 的 Bug 等原因,反复尝试后毫无效果。
后来仔细检查报错日志,经排查后发现一句:
UnityLogError Could not produce class with ID 245.
经查阅官方文档得知,AudioMixerSnapshotController类被裁减掉了。
解决问题

于是新建 link.xml,以防万一,决定保留该类命名空间下的所有类:
<linker>
    <assembly fullname="UnityEngine.AudioModule">
        <namespace fullname="UnityEngine.Audio" preserve="all"/>
        <!-- <type fullname="UnityEngine.Audio.AudioMixerSnapshotController" preserve="all"/> -->
    </assembly>
</linker>
具体这个程序集的名字叫什么,命名空间如何,可以直接 VS F12 定位到相关 API 的反编译代码部分查看。
重新打包,问题解决。
参考链接


  • https://www.jianshu.com/p/e7120f025281
  • https://docs.unity3d.com/2020.3/Documentation/Manual/ManagedCodeStripping.html
  • https://docs.unity3d.com/Manual/ClassIDReference.html
本文使用 Zhihu On VSCode 创作并发布
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 02:42 , Processed in 0.092990 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表