gpt4 book ai didi

c# - 为什么在unity中访问另一个类变量时需要attach或reference and object?

转载 作者:太空宇宙 更新时间:2023-11-03 21:21:22 24 4
gpt4 key购买 nike

例如,如果我想访问另一个类中的整数健康状况,我必须从该类创建一个引用,并将其附加到检查器中的对象或以编程方式。为什么我不能在不附加对象的情况下访问公共(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com