c# – 如何通过GetComponent从另一个游戏对象中的其他脚本访问变量?

前端之家收集整理的这篇文章主要介绍了c# – 如何通过GetComponent从另一个游戏对象中的其他脚本访问变量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经搜索过,我只是不能让这个工作.我想我只是不知道正确的语法,或者只是不了解上下文.

我有一个持有公共int的BombDrop脚本.我有这个工作与公共静态,但有人说,这是一个非常糟糕的编程习惯,我应该学习封装.这是我写的:

BombDrop脚本:

<!-- language: c# -->

 public class BombDrop : MonoBehavIoUr {

 public GameObject BombPrefab;

 //Bombs that the player can drop
 public int maxBombs = 1;


 // Update is called once per frame
 void Update () {

 if (Input.GetKeyDown(KeyCode.Space)){

         if(maxBombs > 0){
         DropBomb();

         //telling in console current bombs
         Debug.Log("maxBombs = " + maxBombs);
         }
   }


 }    

 void DropBomb(){

     // remove one bomb from the current maxBombs
     maxBombs -= 1;

     // spawn bomb prefab
     Vector2 pos = transform.position;
     pos.x = Mathf.Round(pos.x);
     pos.y = Mathf.Round(pos.y);
     Instantiate(BombPrefab,pos,Quaternion.identity);

 }
}

所以我想要附加到preabgameobject Bombprefab的Bomb脚本来访问BombDrop中的maxBombs整数,这样当炸弹被破坏时,它会在BombDrop中添加一个maxBombs.

这是需要引用的炸弹脚本.

public class Bomb : MonoBehavIoUr {
 // Time after which the bomb explodes
 float time = 3.0f;

 // Explosion Prefab
 public GameObject explosion;

 BoxCollider2D collider;

 private BombDrop BombDropScript;




 void Awake (){

     BombDropScript = GetComponent<BombDrop> ();
 }

 void Start () {

     collider = gameObject.GetComponent<BoxCollider2D> ();

     // Call the Explode function after a few seconds
     Invoke("Explode",time);

 }

 void OnTriggerExit2D(Collider2D other){

     collider.isTrigger = false;
 }

 void Explode() {
     // Remove Bomb from game
     Destroy(gameObject);

     // When bomb is destroyed add 1 to the max 
     // number of bombs you can drop simultaneously .
     BombDropScript.maxBombs += 1;

     // Spawn Explosion
     Instantiate(explosion,transform.position,Quaternion.identity);

在文档中,它说应该是这样的

BombDropScript = otherGameObject.GetComponent<BombDrop>();

但这不行.也许我只是不明白这里的语法.是否想说otherGameObject?因为没有做任何事情.我仍然得到错误:“对象引用未设置一个对象的实例”在我的BombDropScript.maxBombs下面的explode()

解决方法

您需要找到包含您计划获得引用的脚本组件的GameObject.确保GameObject已经在场景中,或者Find将返回null.
GameObject g = GameObject.Find("GameObject Name");

然后你可以抓住脚本:

BombDrop bScript = g.GetComponent<BombDrop>();

然后,您可以访问脚本的变量和函数.

bScript.foo();

我刚才意识到,有一天我回答了一个非常类似的问题,请看这里:
Don’t know how to get enemy’s health

自从我回答了这个问题之后,我会扩展一下你的问题.

你的代码正在做的是说“在我的GameObject中查看一个BombDropScript,大部分时间该脚本不会被附加到同一个GameObject.

还要为maxBombs使用setter和getter.

public class BombDrop : MonoBehavIoUr
{
    public void setMaxBombs(int amount)
    {
        maxBombs += amount;
    }

    public int getMaxBoms()
    {
        return maxBombs;
    }
}

猜你在找的C#相关文章