例如,我在脚本“HealthBarGUI1”中有一个变量(public static float currentLife),我想在另一个脚本中使用这个变量。 如何将变量从一个脚本传递到另一个C#Unity 2D?
答案 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;
}