2016-05-15 40 views
1
public static int pscore = 0; 
void Start() 
{ 
    InvokeRepeating("AddToMoney",1, 1); 
} 
void AddToMoney() 
{ 
    pscore++; 
} 

我有這樣的代碼來每秒鐘向整數pscore添加一個點。但現在它增加了2分而不是1分。是因爲它是靜態的嗎?如果是這樣,我該如何解決它?或者我怎樣才能將一個變量從腳本轉移到另一個腳本而不使用靜態?每秒向變量添加一個點不起作用(Unity3d)

注意:我無法在unity3d論壇中獲得答案,這就是爲什麼我在這裏問。

+0

這很奇怪,因爲它現在應該只會每秒增加1分。訪問「pscore」變量的其他代碼段是什麼?聽起來像別的東西的副作用。 –

+0

您是否考慮過不添加定時事件,而是根據需要計算玩家根據時間多少錢? – weston

+0

**不要在Unity中使用靜態**。很顯然你沒有看到這個警告。 – Fattie

回答

1

加點整數pscore每秒

bool keepIncrementing = false; 
public static int pscore = 0; 
void Start() 
{ 
    StartCoroutine(IncementEachSecond()); 
} 

IEnumerator IncementEachSecond() 
{ 
    keepIncrementing = true; 
    while (keepIncrementing) 
    { 
     pscore++; 
     yield return new WaitForSeconds(1); 
    } 
} 

void stopIncrementing() 
{ 
    keepIncrementing = false; 
} 

我怎樣才能從腳本中使用傳送一個變量到另一個腳本,而不 靜態

public class ScriptA : MonoBehaviour{ 

    public int pscore = 0; 

    void Start() 
    { 

    } 
} 

訪問變量pscore in ScriptAScriptB

public class ScriptB : MonoBehaviour{ 

    ScriptA scriptInstance = null; 

    void Start() 
    { 
     GameObject tempObj = GameObject.Find("NameOfGameObjectScriptAIsAttachedTo"); 
     scriptInstance = tempObj.GetComponent<ScriptA>(); 
     scriptInstance.pscore = 5; 
    } 
} 
+1

感謝您的幫助!這工作。 – TheEnthusiast