我无法弄清楚如何使用反射SetValue

时间:2016-09-14 15:19:59

标签: c# unity3d reflection

我一直试图使用反射一段时间,遗憾的是我的努力导致我出错,我想要做的是从另一个脚本获取整数字段并更改它,这是我的代码:

我的第一个脚本

using UnityEngine;
using System.Collections;

public class GameInformation : MonoBehaviour 
{

    void Awake()
    {
        DontDestroyOnLoad(transform.gameObject);
    }

    //1 is bought while 0 is not bought
    public static int TipJar;
}

我的第二个脚本

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic; 
using System;


public class Upgrades : MonoBehaviour 
{
    public GameInformation gio;

    void Start()
    {
        gio = GameObject.Find("lol").GetComponent<GameInformation>();

        Type myClassType = gio.GetType().GetField("TipJar").SetValue(gio, 1, null); //<-- Error
    }
}

有什么想法吗?很抱歉提出一个不起眼的问题我还在学习如何编程并提前致谢!

2 个答案:

答案 0 :(得分:2)

您需要GetField(string name, BindingFlags flags)的重载变体。

gio.GetType().GetField("TipJar", BindingFlags.Static | BindingFlags.Public).SetValue(null, 1);

答案 1 :(得分:2)

TcKs的回答应该适合你,我就像补充一样,指出你不需要GameInformation的实例。你可以使用类似的东西:

typeof(GameInformation).GetField("TipJar", BindingFlags.Static | BindingFlags.Public).SetValue(null, 1);

所以基本上你不需要找到GameInformation的实例引用来获取静态字段。