2016-09-12 93 views
0

我有一個涉及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

我試圖用GameInformation.playerList[i].Name(which is TipJar) += 1替換playerList[i].NewValue += 1;

我一直在尋找一段時間,我找不到解決方案,任何想法?

+1

這個問題不是很清楚,你想達到什麼目的?你有預期的產量嗎? – Bassie

+0

對不起,你想達到什麼目的?很不清楚 – Tinwor

+0

你的GameInformation類只定義了一個int var「TipJar」 – joreldraw

回答

0

,我的目標就是使GameInformation.TipJar的值爲1時,內部的for循環();

以從你這個評論,我認爲GameInformation.TipJar意味着是全球性的(這意味着它應該是1在循環的時候,不管playerList的內容)。我會爲您提供此假設下,解決你的問題有2種方法:

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


如果不回答你的問題,那麼我很抱歉,我真的不明白你正在嘗試做的。

+0

啊謝謝你幫助我很多:) – OddTuna

1

最有可能是一個錯字?

變化

GameInformation.playerList[i].Name += 1; //This line will not work 

playerList[i].Name += 1; 

而且現場NameString型的,所以我懷疑+1有道理這裏。我想你想對不起,我不清楚的問題類似

playerList[i].Name += (i + 1);