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

我已经搜寻了一下,但无法正常工作。我想我只是不知道正确的语法,或者只是不太了解上下文。

我有一个包含公共int的BombDrop脚本。我让它与Public static一起使用,但是有人说这是一种非常不好的编程习惯,我应该学习封装。这是我写的:

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);

}

}

因此,我希望附加到prefabgameobject

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?原因是什么都不做。我仍然在explode()中的BombDropScript.maxBombs上收到错误:“未设置对象引用执行对象的实例”

回答:

您需要找到包含计划获取引用的脚本组件的GameObject。确保GameObject已经在场景中,否则Find将返回null

 GameObject g = GameObject.Find("GameObject Name");

然后,您可以获取脚本:

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

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

 bScript.foo();

我刚刚意识到,前几天我回答了一个非常类似的问题,请在此处查看:

不知道如何获得敌人的健康


由于我已经回答了您的问题,因此我将对其进行扩展。

您的代码正在执行的操作是说:“在BombDropScript大多数情况下,脚本不会附加到相同的GameObject中。

也可以使用setter和getter maxBombs

public class BombDrop : MonoBehaviour

{

public void setMaxBombs(int amount)

{

maxBombs += amount;

}

public int getMaxBoms()

{

return maxBombs;

}

}

以上是 如何通过GetComponent从另一个游戏对象中的另一个脚本访问变量? 的全部内容, 来源链接: utcz.com/qa/413434.html

回到顶部