【发布时间】:2019-06-11 00:11:52
【问题描述】:
我目前正在制作一个 Breakout 风格的游戏,并且在玩超过 5 或 6 个球时会出现破坏砖块的问题(没有能够重现此错误的可靠数字,它只会在有很多球时发生在玩)。有双倍和三倍球的力量,所以球的数量可以在短时间内迅速增加。
在我的 GameManager 脚本中,我会在场景开始时记录积木的初始数量,并在每次球与积木接触时减 1。积木数量为零后,玩家获胜,游戏结束。该游戏适用于少量球,但是当涉及太多球时,该过程似乎会中断。
GameManager.cs 的相关代码:
void Start()
{
livesText.text = "Lives: " + Lives;
numOfBalls = GameObject.FindGameObjectsWithTag("Ball").Length;
numOfBricks = GameObject.FindGameObjectsWithTag("Brick").Length;
//Debug.Log(numOfBalls);
}
public void UpdateBrickNumber()
{
numOfBricks--;
if(numOfBricks <= 0)
{
numOfBricks = 0;
GameOver();
}
}
void GameOver()
{
gameOver = true;
if(numOfBricks == 0)
{
WinPanel.SetActive(true);
}
else
{
GameOverPanel.SetActive(true);
}
}
...
处理碰撞的球码:
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.transform.CompareTag("Brick"))
{
Debug.Log("Brick Hit");
//Chance of powerup to spawn
int rand = Random.Range(1, 101);
//Chance of each power up
int rand2 = Random.Range(1, 101);
if (rand < 7)
{
if (rand2 >=1 && rand2<=20) {
Instantiate(SpeedBall, collision.transform.position, collision.transform.rotation);
//Debug.Log(" Speed Power Up Created ");
}
...
Rest of power ups
...
}
Transform newExplosion = Instantiate(explosion, collision.transform.position, collision.transform.rotation);
Destroy(newExplosion.gameObject, 2f);
gm.UpdateBrickNumber();
Destroy(collision.gameObject);
}
}
调试日志确实显示了正确数量的砖块被击中,但我认为有些球在有机会被摧毁之前就击中了同一个砖块。如何确保在另一个球击中砖块上的对撞机之前砖块已被摧毁?
【问题讨论】:
-
你没有说真正的问题是什么。
标签: c# unity3d game-physics