Unity用Reflection按方法名取其他脚本局部变量时运行卡死如何解决?
问题根因
你对要访问的目标成员类型判断完全错误,PreMaps类里的map不是某方法的内部局部变量,是公共嵌套类MapName下的公共静态只读字段,你调用GetMethod查找方法的逻辑从根上就不匹配目标结构。
卡死直接原因
你的PreMaps类中没有任何自定义成员方法,preMaps.GetType().GetMethod(mapName)会直接返回null,你没有做非空校验就直接调用Method.Invoke、Method.GetMethodBody(),触发空引用异常,异常没有被捕获时就会导致Unity运行无响应。
正确实现代码
不需要调用任何方法,直接通过反射获取嵌套类的静态字段即可:
using System.Reflection; // 先获取PreMaps下的嵌套类MapName的类型 Type nestedMapType = typeof(PreMaps).GetNestedType("MapName", BindingFlags.Public); if (nestedMapType != null) { // 获取静态字段map的元数据 FieldInfo mapField = nestedMapType.GetField("map", BindingFlags.Public | BindingFlags.Static); if (mapField != null) { // 静态字段不需要实例,GetValue传null即可 string[] mapContent = mapField.GetValue(null) as string[]; // 测试打印数组内容 foreach (var line in mapContent) { print(line); } } }
额外说明
如果没有动态获取的强需求,你完全可以不用反射,直接访问PreMaps.MapName.map拿到数组,性能更高也不会有空引用风险。
内容的提问来源于stack exchange,提问作者GoodMobiley
相关产品推荐
相关产品推荐

