2015-03-25 173 views
-2

在Unity 5.0中,由於我在下面寫的代碼,我得到以下錯誤。不幸的是,我不明白,任何人都可以幫忙嗎?unity3d 5.0 C#出錯CS0120:訪問非靜態成員需要對象引用

moneyGet.cs(19,17):錯誤CS0120:一個對象引用需要訪問非靜態成員`moneySystem.money '

using UnityEngine; 

public class moneyGet : MonoBehaviour 
{ 
    int curHealth = 100; 

    int maxHealth = 100; 

    public void Update() 
    { 
     if (curHealth > maxHealth) 
     { 
      curHealth = maxHealth; 
     } 

     if (curHealth < 0) 
     { 
      curHealth = 0; 

      moneySystem.money += 100;//name of your script moneySystem 
     } 

    } 
} 

但是,下面的代碼沒有按'牛逼引發任何錯誤:

using UnityEngine; 

public class moneySystem : MonoBehaviour 
{  
    public int money = 0;//amout of your money 

    GUIText moneyText;//To Display Your money  

    void Update() 
    { 
     if (money < 0) 
     { 
      money = 0; 

     } 
    } 
} 
+2

部分偏離主題,但這是代碼標準派上用場的地方...... C#傾向於用駱駝套管和大寫字母定義類,其中變量以較低的套管開始.. – Sayse 2015-03-25 11:27:55

+0

個人而言,我討厭當人們投票時沒有理由。至於部分題外話,無視。你有一個合法的問題,在學習的同時,每個人都有自己的編碼風格和命名約定。統一是奇怪的,因爲你不知道對象創建的順序,然後將「組件」添加到遊戲對象中。我也在這個過程中學習。 – DRapp 2015-03-25 11:32:15

+0

@DRapp - 我的downvote沒有鏈接到我的評論。它與如果你[谷歌「訪問非靜態成員需要對象引用」](https://www.google.co.uk/search?q=An+object+reference+is+需要+到+訪問+非靜態+成員&ie = utf-8&oe = utf-8&gws_rd = cr&ei = 7JwSVfOgL4ae7gah1YGoAg)你會被充斥着重複的答案 – Sayse 2015-03-25 11:33:44

回答

0

我不知道團結,所以我不能對整體設計進行評論,但像編譯器會告訴你,你需要moneySystem一個參考,因爲它money peroperty不是靜態的。

因此,你可以在moneyGet的構造函數實例化一個moneySystem

public class moneyGet 
{ 
    private moneySystem _moneySystem; 

    public moneyGet() 
    { 
     _moneySystem = new moneySystem(); 
    } 
} 

然後在Update(),你可以做_moneySystem.money += 100;

2

或者,根據遊戲持續時間的預期上下文,您可以將您的moneySystem類設置爲STATIC類,以便它始終可用於整個遊戲時間,而不會「丟失」對象引用...使其上的屬性也是靜態的。

public static class moneySystem : MonoBehaviour { 

    public static int money = 0;//amout of your money 

    GUIText static moneyText;//To Display Your money 
    ... rest of class... 

然後,如果你有其他的元素,遊戲場景等,你就不必擔心試圖實例他們,哎呀忘了,或者重新實例他們丟失任何以前的「錢」的價值觀。

相關問題