如何计算屏幕上实例化的游戏对象

问题描述 投票:0回答:1

我希望玩家在给定时间可以放置的炸弹数量有限。我能够限制炸弹,但是当

gameObject
被摧毁时,我不知道如何通过我的项目设置来更改我的
bombCount

我的播放器代码如下:

public GameObject bomb;
private int bombCount = 0;
public int maxBombs;

void Update()
{
  if (Input.GetButtonDown("Fire1"))
  {
    if (ball.activeSelf)
    {
      if (bombCount < maxBombs)
      {
        bombCount++;
        Instantiate(bomb, bomb.position, bomb.rotation);
      }
      else
      {
        // Count the bombs on screen and
        // change bombcount to # of bombs
      }
    }
  }
}

我正在销毁单独的 BombController 文件中的炸弹。我的问题是,当物体被摧毁时,我是否能够以某种方式从炸弹计数中减去或计算存在多少炸弹?

作为参考,这也是我的 BombController 代码

public float timeToExplode = 0.5f;
public GameObject explosion;

void Update()
{
  timeToExplode -= Time.deltaTime;
  if (timeToExplode <= 0)
  {
    if (explosion != null)
    {
      Instantiate(explosion, transform.position, transform.rotation);
    }
    Destroy(gameObject);
  }
}
c# unity-game-engine gameobject
1个回答
0
投票

可以通过不同的方式来完成。在您的情况下,最简单的方法之一是在炸弹被摧毁时添加回调。喜欢:

在你的炸弹脚本中

Action _onExplode;

public void SetOnExplode(Action onExplode)
{
    _onExplode = onExplode;
}

void Update()
{
  timeToExplode -= Time.deltaTime;
  if (timeToExplode <= 0)
  {
    if (explosion != null)
    {
      Instantiate(explosion, transform.position, transform.rotation);
    }
    _onExplode?.Invoke();
    Destroy(gameObject);
  }
}

在你的主脚本中

if (bombCount < maxBombs)
      {
        bombCount++;
        var bomb = Instantiate(bomb, bomb.position, bomb.rotation).GetComponent<BombController>();
        bomb.SetOnExplode(() => bombCount--);
      }

总体而言,这种方式远非好,但它会起作用,并且不需要您进行重大更改。

© www.soinside.com 2019 - 2024. All rights reserved.