Mic*_*D47 5 c# variables unity-game-engine
例如,我在脚本"HealthBarGUI1"中有一个变量(public static float currentLife),我想在另一个脚本中使用这个变量.如何将变量从一个脚本传递到另一个C#Unity 2D?
你可以做这样的事情,因为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
您可以通过以下方式访问它:
HealthBarGUI1.currentLife
Run Code Online (Sandbox Code Playgroud)
我假设 HealthBarGUI1 是您的 MonoBehaviour 脚本的名称。
如果您的变量不是静态的并且两个脚本位于同一个游戏对象上,您可以执行以下操作:
gameObject.GetComponent<HealthBarGUI1>().varname;
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           20185 次  |  
        
|   最近记录:  |