如何将变量从一个脚本传递到另一个C#Unity 2D?

Mic*_*D47 5 c# variables unity-game-engine

例如,我在脚本"HealthBarGUI1"中有一个变量(public static float currentLife),我想在另一个脚本中使用这个变量.如何将变量从一个脚本传递到另一个C#Unity 2D?

Wip*_*ter 9

你可以做这样的事情,因为currentLife与玩家的关系比与gui更相关:

class Player {

  private int currentLife = 100;

  public int CurrentLife {
    get { return currentLife; }
    set { currentLife = value; }
  }

}
Run Code Online (Sandbox Code Playgroud)

您的HealthBar可以通过两种方式访问​​currentLife.

1)使用GameObject类型的公共变量,您只需将您的Player从Hierarchy拖放到检查器中脚本组件的新字段中.

class HealthBarGUI1 {

  public GameObject player;
  private Player playerScript;

  void Start() {
    playerScript = (Player)player.GetComponent(typeof(Player)); 
    Debug.Log(playerscript.CurrentLife);
  }

}
Run Code Online (Sandbox Code Playgroud)

2)通过使用find实现自动方式.它有点慢,但如果不经常使用,它没关系.

class HealthBarGUI1 {

  private Player player;

  void Start() {
    player = (Player)GameObject.Find("NameOfYourPlayerObject").GetComponent(typeof(Player));
    Debug.Log(player.CurrentLife);
  }

}
Run Code Online (Sandbox Code Playgroud)

我不会让你的玩家的currentLife变量或任何其他生物静态.这意味着,这样一个对象的所有实例共享相同的currentLife.但我猜他们都有自己的人生价值吧?

在面向对象时,出于安全和简单的原因,大多数变量应该是私有的.然后可以通过使用getter和setter方法使它们可访问.

我在顶级句子中的意思是,你也想以一种非常自然的方式将事物分组.玩家有生命价值吗?写进播放器类!之后,您可以使其他对象可以访问该值.

资料来源:

https://www.youtube.com/watch?v=46ZjAwBF2T8 http://docs.unity3d.com/Documentation/ScriptReference/GameObject.Find.html http://docs.unity3d.com/Documentation/ScriptReference/GameObject. GetComponent.html


Rad*_*iță 0

您可以通过以下方式访问它:

HealthBarGUI1.currentLife
Run Code Online (Sandbox Code Playgroud)

我假设 HealthBarGUI1 是您的 MonoBehaviour 脚本的名称。

如果您的变量不是静态的并且两个脚本位于同一个游戏对象上,您可以执行以下操作:

gameObject.GetComponent<HealthBarGUI1>().varname;
Run Code Online (Sandbox Code Playgroud)