我希望玩家在给定时间可以放置的炸弹数量有限。我能够限制炸弹,但是当
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);
}
}
可以通过不同的方式来完成。在您的情况下,最简单的方法之一是在炸弹被摧毁时添加回调。喜欢:
在你的炸弹脚本中
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--);
}
总体而言,这种方式远非好,但它会起作用,并且不需要您进行重大更改。