一尘不染

从另一个组件访问变量/函数

c#

所以我试图通过触摸一个多维数据集来更改另一个脚本中的变量。当前设置

  • 1x播放器
  • 1x敌人

每个都有自己的脚本Enemy_StatsCharacter_Stats
正如您在这个小片段中所看到的,从另一个脚本访问变量是一个很不错的解决方法。

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.tag == "Enemy")
    {
        collision.gameObject.GetComponent<Enemy_Stats>().Health = 
            collision.gameObject.GetComponent<Enemy_Stats>().Health 
            - gameObject.GetComponent<Character_Stats>().AttackDamage;

        if (collision.gameObject.GetComponent<Enemy_Stats>().Health <= 0)
        {
            Destroy(collision.gameObject);
        }
    }
}

荫新团结,而不是有没有办法只是类似参考吧:
collision.Health


阅读 297

收藏
2020-05-19

共1个答案

一尘不染

如何从另一个类访问变量/函数。您要访问或调用的变量或函数必须public不是private

public class ScriptA : MonoBehaviour{

    public int playerScore = 0;

    void Start()
    {

    }

    public void doSomething()
    {

    }
}

访问变量playerScoreScriptAScriptB。首先,GameObject.Find使用该GetComponent功能找到脚本或组件所附加的GameObject,然后使用该函数来检索该脚本或组件所附加的游戏对象。

public class ScriptB : MonoBehaviour{

    ScriptA scriptInstance = null;

    void Start()
    {
      GameObject tempObj = GameObject.Find("NameOfGameObjectScriptAIsAttachedTo");
      scriptInstance = tempObj.GetComponent<ScriptA>();

      //Access playerScore variable from ScriptA
      scriptInstance.playerScore = 5;

     //Call doSomething() function from ScriptA
      scriptInstance.doSomething();
    }
}
2020-05-19