例如,如果我想访问另一个类中的整数健康状况,我必须从该类创建一个引用,并将其附加到检查器中的对象或以编程方式。为什么我不能在不附加对象的情况下访问公共(public)整数?示例代码
public class Game : MonoBehaviour
{
public int health;
}
public class player : MonoBehaviour
{
public Game gameScript;
gameScript.health = 10; //this will cause nullpointer error if not attached to a gameobject or
//public GameObject test;
//gameScript = test.GetComponent<testscript> ();
}
最佳答案
要能够在 Unity 中访问其他值而不将其附加到 GameObject,您必须确保您没有继承 MonoBehaviour。一旦您继承了 MonoBehaviour,您将不再能够访问其他脚本中的值或函数。这就是 Unity 的制作方式。
所以改变:
public class Game : MonoBehaviour
{
public int health;
}
到
public class Game
{
public int health;
}
此外,您必须在访问该值之前使用 new 关键字,否则您的类将为 null 并使您的程序崩溃。
public Game gameScript;
gameScript.health = 10;
应该改成这样:
public Game gameScript = new Game();
gameScript.health = 10;
由于您将从其他类访问您的类,因此您需要将健康变量设置为static 并直接访问。如果不这样做,每次使用 new 关键字时都会有许多健康变量实例。
通过将变量设为静态,您可以直接执行 Game.health = 10;
,而无需使用关键字或创建它的另一个实例。下面是一个例子:
public class Game
{
public static int health;
}
然后你就可以访问它了
Game.health = 10;
编辑:
获取/设置方法
public class Game
{
public static int health;
public static int getHealth(){
return Game.health;
}
public static void setHealth(int tempHealth){
Game.health = tempHealth;
}
}
然后要从其他类访问它,您可以这样做:
Debug.Log(Game.getHealth().toString());
修改,
Game.setHealth(10);
我确实编译了这个,但它应该可以工作。
关于c# - 为什么在unity中访问另一个类变量时需要attach或reference and object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30448657/