在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;
}
}
}
答案 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;
。