Unity 2021 IL2CPP中System.Type.GetType获取全局类异常问题
解决方案与问题分析
一、正确获取global::Character的方法
1. 明确指定全局前缀+程序集名调用GetType
在Unity 2021 IL2CPP环境下,直接使用包含global::前缀的完整类型名称(搭配程序集名),就能精准定位全局类型:
// 精准获取全局Character Type globalCharacter = Type.GetType("global::Character, Assembly-CSharp"); // 精准获取嵌套枚举MovementType Type movementType = Type.GetType("global::Character+MovementType, Assembly-CSharp");
注意替换Assembly-CSharp为你的实际程序集名称(如果全局Character在其他程序集里)。
2. 通过程序集实例直接查找(更稳定)
绕开Type.GetType的全局搜索逻辑,直接从目标程序集中查找类型,完全避免匹配错误:
// 加载目标程序集 var targetAssembly = System.Reflection.Assembly.Load("Assembly-CSharp"); // 获取全局Character类型 Type globalCharacter = targetAssembly.GetType("Character"); // 获取嵌套枚举MovementType Type movementType = targetAssembly.GetType("Character+MovementType");
这种方式不受IL2CPP搜索优先级变化的影响,兼容性更强。
二、问题根源判断
这是Unity 2021 TLS IL2CPP的行为异常(或bug):
- 按照.NET标准行为,
Type.GetType("Character")应该优先匹配全局命名空间下的类型,而不是嵌套类;同时嵌套类型的AssemblyQualifiedName必须能被正确解析。 - 该问题仅在2021 IL2CPP构建中出现,编辑器和2019 IL2CPP无此问题,说明是IL2CPP在2021版本中的类型搜索/解析逻辑发生了不符合标准的变更。
如果需要确认是否为官方已知bug,可以前往Unity Issue Tracker查询相关反馈;当前优先使用上述两种方法解决问题即可。
内容的提问来源于stack exchange,提问作者deck
相关产品推荐
相关产品推荐

