从另一个脚本访问变量/函数

从另一个脚本访问变量/函数

所以我试图通过触摸一个立方体来改变另一个脚本中的变量。电流设置

  • 1x播放器
  • 1倍敌人

每个人都有自己的脚本Enemy_Stats & Character_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?


牛魔王的故事
浏览 358回答 3
3回答

湖上湖

如何从另一个类访问变量/函数。要访问或调用的变量或函数必须为public不private.public&nbsp;class&nbsp;ScriptA&nbsp;:&nbsp;MonoBehaviour{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;playerScore&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;Start() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;doSomething() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;}}存取变量playerScore在……里面ScriptA从…ScriptB..首先,找到脚本或组件附加到的GameObjectGameObject.Find函数,然后使用GetComponent函数检索附加到它的脚本或组件。public&nbsp;class&nbsp;ScriptB&nbsp;:&nbsp;MonoBehaviour{ &nbsp;&nbsp;&nbsp;&nbsp;ScriptA&nbsp;scriptInstance&nbsp;=&nbsp;null;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;Start() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GameObject&nbsp;tempObj&nbsp;=&nbsp;GameObject.Find("NameOfGameObjectScriptAIsAttachedTo"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scriptInstance&nbsp;=&nbsp;tempObj.GetComponent<ScriptA>(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Access&nbsp;playerScore&nbsp;variable&nbsp;from&nbsp;ScriptA &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scriptInstance.playerScore&nbsp;=&nbsp;5; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Call&nbsp;doSomething()&nbsp;function&nbsp;from&nbsp;ScriptA &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scriptInstance.doSomething(); &nbsp;&nbsp;&nbsp;&nbsp;}}

桃花长相依

自那以后没有Health不是碰撞对象的一部分,但是Enemy_Stats..您可以缓存Component(这就是EndemyStats是什么)如果您多次使用它来节省一些输入(以及一些性能,但对于本例来说,这是相当有限的)。此外,您还可以缓存“已知”组件,如本例中所示。Player_Stats..你可以这样做,例如Start或者用公共变量和检查员。不过,你应该做的是让敌人对他的生命负责,而不是让玩家负责。Destroy-部分-Enemy_Stats(确切地说是进入健康财产)。

翻翻过去那场雪

第一件要缩短(并最终更快)的事情是存储以下内容:gameObject.GetComponent<Character_Stats>()在……上面Start()在私有变量中(如果可以避免的话,应该避免频繁调用GetComponent)。对于健康变量,一种避免GetComponent调用可能是缓存:您创建一个Dictionary<GameObject, Enemy_Stats>一旦这个游戏物体相撞一次
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript