我一直试图使用反射一段时间,遗憾的是我的努力导致我出错,我想要做的是从另一个脚本获取整数字段并更改它,这是我的代码:
我的第一个脚本
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
}
}
有什么想法吗?很抱歉提出一个不起眼的问题我还在学习如何编程并提前致谢!
答案 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
的实例引用来获取静态字段。