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

Unity C#反射修改变量无报错但未生效的解决方法

反射修改变量不生效的解决方法

问题出在值类型的拷贝特性上:float是值类型,调用FieldInfo.GetValue()时会返回原变量的副本,你后续对Value的赋值只是修改了这个副本,完全没触碰到UpgradeValues实例里的原speed变量。

修正方法很简单,直接用FieldInfo.SetValue()方法给原变量赋值,而不是修改GetValue返回的副本:

public void OnMouseDown()
{
    var Instance = ChosenObject.GetComponent<UpgradeValues>();
    if (Instance == null) return; // 先确保实例获取成功
    
    var field = typeof(UpgradeValues).GetField(VarName, BindingFlags.Public | BindingFlags.Instance);
    if (field == null) // 防止变量名拼写错误导致空引用
    {
        Debug.LogError($"找不到名为{VarName}的字段");
        return;
    }
    
    field.SetValue(Instance, 100f); // 直接给原实例的字段赋值
}

额外说明

  • 对于引用类型(比如自定义类、数组),GetValue返回的是对象引用,修改引用指向的内容会影响原实例,但值类型始终是拷贝,必须用SetValue才能修改原变量。
  • 加上空值检查可以避免后续代码出现隐藏错误,方便调试。

内容的提问来源于stack exchange,提问作者ReoCyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:17:34