unity3d 5.0 C#获取错误CS0120:访问非静态成员需要对象引用

时间:2015-03-25 11:21:26

标签: c# unity3d

在Unity 5.0中,由于下面编写的代码,我收到以下错误。不幸的是,我没有得到它,有人可以帮忙吗?

  

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 个答案:

答案 0 :(得分: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...

然后,如果您有其他元素,游戏场景等,您不必担心尝试实例化它们并且忘记oops,或者通过重新释放它们之前的任何“钱”值。

答案 1 :(得分:0)

我不认识Unity所以我无法评论整体设计,但是就像编译器告诉你的那样,你需要引用moneySystem,因为它的money peroperty不是静态的。

因此,您可以在moneySystem的构造函数中实例化moneyGet

public class moneyGet
{
    private moneySystem _moneySystem;

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

然后在Update()您可以_moneySystem.money += 100;