我遇到了涉及2个不同脚本的问题。我想要实现的是使用字符串来访问静态变量,如标题建议。
我的第一个脚本:
using UnityEngine;
using System.Collections;
public class GameInformation : MonoBehaviour
{
//Upgrades Info, 1 is bought while 0 is not bought
public static int TipJar;
}
我的第二个脚本:
using UnityEngine;
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
public class Upgrades : MonoBehaviour
{
public List<PlayerTank> playerList;
public class PlayerTank // Here is my class for PlayerTank
{
public string Name;
public string Value;
// This is a constructor to make an instance of my class.
public PlayerTank (string NewName, int NewValue)
{
Name = NewName;
Value = NewValue;
}
}
void Start()
{
playerList = new List<PlayerTank>();
playerList.Add (new PlayerTank("TipJar", GameInformation.TipJar));
//To loop all the list
for(int i = 0; i < playerList.Count; i++)
{
int TempInt = i;
playerList[i].NewValue += 1; //This line works but Gameinformation.TipJar will still contain the value 0, i want it to be 1.
}
}
}
我的目标是更新GameInformation.TipJar
中的值,但它会一直包含0
。
我尝试将playerList[i].NewValue += 1;
替换为GameInformation.playerList[i].Name(which is TipJar) += 1
。
我一直在寻找一段时间,我找不到解决方案,任何想法?
答案 0 :(得分:1)
很可能是拼写错误?
更改
GameInformation.playerList[i].Name += 1; //This line will not work
到
playerList[i].Name += 1;
字段Name
的类型为String
,所以我怀疑+1在这里有意义。我想你想要像
playerList[i].Name += (i + 1);
答案 1 :(得分:0)
对于不明确的问题,我很抱歉,我的目标只是在for循环()中使GameInformation.TipJar的值为1;
从你那里得到这个评论,我认为GameInformation.TipJar
意味着是全局的(意味着它在你的循环中应该是1,无论playerList
的内容如何)。在此假设下,我将为您提供两种解决问题的方法:
<强> 1。使用静态变量(简单方法)
如果这是正确的,那么只需在循环开始之前设置静态GameInformation.TipJar = 1;
,然后在循环之后立即设置GameInformation.TipJar = 0;
。
<强> 2。使用反射
如果您对GameInformation
对象有引用(比如它名为gio
),您可以按字段名称将其字段设置为字符串:gio.GetType().GetField("TipJar").SetValue(gio, value)
。 (见:https://msdn.microsoft.com/en-us/library/6z33zd7h(v=vs.110).aspx)
如果这不能回答你的问题,那么我很抱歉,我真的不知道你想要做什么。