Unity中Scriptable Object编辑器可用但iOS构建后失效问题咨询
Unity打包iOS后Scriptable Object无法通过Resources.FindObjectsOfTypeAll获取的原因分析
可能的原因:
- 资源未被打包进构建:Unity打包时只会包含
Resources目录下的资源,或被场景/代码直接引用的资源。编辑器中Resources.FindObjectsOfTypeAll能扫描到所有加载的资源(包括未被引用的),但打包后未被引用且不在Resources里的skinsbgcreator实例会被裁剪,导致返回空数组。 - 类型识别异常:iOS打包默认开启代码优化/裁剪,可能篡改了
skinsbgcreator的类型元数据,使FindObjectsOfTypeAll无法匹配到对应类型。 - 资源未加载到内存:打包后的运行时,
FindObjectsOfTypeAll仅返回已加载到内存的实例。如果你的skinsbgcreator实例没有被主动加载(比如通过Resources.Load),打包后不会自动加载到内存,自然无法被扫描到。 - 资源管理方式冲突:如果使用了Addressables等第三方资源系统,编辑器里
FindObjectsOfTypeAll能扫到资源,但打包后未通过对应系统加载,资源不会进入内存。
解决建议:
- 检查
skinsbgcreator实例是否放在Resources目录下,或确保它们被场景/脚本直接引用(比如在脚本中声明public skinsbgcreator[] skins;并在Inspector赋值)。 - 改用
Resources.LoadAll<skinsbgcreator>("资源所在子路径")替代FindObjectsOfTypeAll,主动加载指定目录下的所有对应类型资源。 - 临时关闭iOS打包的代码优化(在
PlayerSettings -> Other Settings -> Optimization中取消勾选Strip Engine Code或Enable Code Optimization),排查是否是类型裁剪导致的问题。 - 若使用Addressables等资源系统,改用对应系统的API加载资源(如
Addressables.LoadAssetsAsync<skinsbgcreator>())。
内容的提问来源于stack exchange,提问作者Ilyass Frach
相关产品推荐
相关产品推荐

