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

标签 c# unity3d

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

相关文章:

c# - 如何防止错误的项目引用?

ios - Unity/iOS - MoPub 安装 - Xcode 编译错误

github - 如何从 Github 获取项目到 Unity

c# - Unity Universal Render Pipeline 性能问题? (二维)

c# - 多线程访问 System.Collection.Concurrent 中的非线程安全值?

c# - 如何将单个 SQL 条目保存为变量?

android - 尝试将 Android 应用程序上传到 Play 商店时出现问题

c# - 如何在 OSX 上使用 C# 运行 shell 脚本?

c# - ApiController 中的 Url.Route 不包含主机名

c# - 如何在不解压的情况下递归探索 zip 文件内容