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

时间:2014-04-08 04:25:15

标签: c# variables unity3d

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

3 个答案:

答案 0 :(得分:9)

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

class Player {

  private int currentLife = 100;

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

}

您的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);
  }

}

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

class HealthBarGUI1 {

  private Player player;

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

}

我不会让你的玩家的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

答案 1 :(得分:0)

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

HealthBarGUI1.currentLife

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

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

gameObject.GetComponent<HealthBarGUI1>().varname;

答案 2 :(得分:0)

//Drag your object that includes the HealthBarGUI1 script to yourSceondObject place in the inspector.

public GameObject yourSecondObject;

class yourScript{

    //Declare your var and set it to your var from the second script.
    float Name = yourSecondObject.GetComponent<HealthBarGUI1>().currentLife;

}