You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:54:00