当前位置:   article > 正文

Unity 引擎 Managed Stripping Level 遇到的坑

Unity 引擎 Managed Stripping Level 遇到的坑

Unity Managed Stripping Level 个人见解


当前Unity版本, Unity2020.3.20f1c1
官方文档 https://docs.unity3d.com/2020.3/Documentation/ScriptReference/ManagedStrippingLevel.html

在这里插入图片描述
一直知道这个 api 会使代码量减少 包体减小,不明白其中的意思。但是今天在打包exe做反射获取类的属性时,用代码时指定类指定了属性的值 ,但是却报错 Property Set Method Not found,字面意思时属性没有Set方法,但是我代码中明明是有Set访问器的 而且我编辑器时可以完成设置属性值的,打包后报错 ,于是查看反汇编打包后的Assembly-CSharp.dll文件,发现其中内容都因为我设置 Managed Stripping Level 为 Medium而使得没有使用到的代码被剪裁,如下图,

在这里插入图片描述
再看下我 Unity 编辑器中 的代码 ,
在这里插入图片描述
在这里插入图片描述

可以看到 我代码没有使用具体类型对象的ProPertyInfo.SetValue 而使用 的是泛型 设置 对象熟悉,导致了属性 Set访问器丢失,而且我代码中对 自定义类的其他属性并没有调用 ,其他属性成员也被 裁剪。所以 需要注意这个api的具体含义 再去使用 。特此纪律 ,文中代码 仅作演示参考 , 如有侵权 请联系

时间:2022.0815
说明:原来项目版本Unity2020.3.20f1c1 ,感觉项目打开太慢于是升级到了Unity2021.3.4f1c1,因为我设置代Unity Managed Stripping Levellow,结果一些代码不生效,代码如下在这里插入图片描述
在这里插入图片描述
这里工程代码完全一致,BuildSetting 中设置的Managed Stripping Level 也同样时 low,但是却得到了不通的结果在这里插入图片描述
为什么会同样代码同样设置 却一个能够实现 效果一个不行,猜测这部分代码被剪裁,dnspy查看Assembly-CSharp.dll,发现两个脚本位置都没被剪裁(怎么可能,代码用的好好的),那就只可能被Unity剪裁到了代码中用的类的其他类(纯猜测 ),尝试把Unity2021版本的设置成了Disabled(Minimal不行) ,代码可以生效。再来看下官方文档
2020.3的
在这里插入图片描述
2021.3的
在这里插入图片描述
来看下 2021.3.4 f1c1 不同 Managed Stripping Level 设置的打包dll(同一项目
在这里插入图片描述
具体里面裁剪了什么,或者Unity的目的什么的我不想去猜(水平不够),不过我只想说一些:Unity 官方B站号 一天到晚的打游戏,Gigaya项目 被砍 ,文档都是坑 ,纯 sb引擎

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/115412
推荐阅读
相关标签
  

闽ICP备14008679号