Согласно вашему коду, уровень завершается один раз trigCont > 50
, и в этот момент вы отображаете меню с количеством запусков и кнопками для повторения уровня или перехода к следующему.
Если это так, вы должны переместить Invoke("nextScene", 0);
в конец этого условия.Что-то вроде
if (trigCont > 50)
{
if (trigCont == 51)
{
//...
for (int i = 0; i < Camera.main.transform.childCount; i++)
{
if (Camera.main.transform.GetChild(i).GetComponent<ParticleSystem>() != null)
{
Camera.main.transform.GetChild(i).GetComponent<ParticleSystem>().Play();
}
}
CancelInvoke("Check");
Invoke("nextScene", 0);
}
}
Кроме того, поскольку предполагается, что это конец уровня, я бы добавил флаг в начале void OnTriggerEnter2D(Collider2D col)
, чтобы игнорировать все остальное, происходящее на сцене.Лучше всего было бы остановить / отключить / уничтожить все остальное на сцене.Но у меня нет информации о том, какие другие элементы могут взаимодействовать в вашей сцене.Таким образом, вы можете сделать:
int trigCont;
GameManager gm;
int Star;
bool sceneIsOver = false;
...
И внутри OnTriggerEnter2D:
void OnTriggerEnter2D(Collider2D col)
{
if(!sceneIsOver)
if (col.gameObject.tag == "DynamicParticle")
{
//...
if (trigCont > 50)
{
if (trigCont == 51)
{
//...
for (int i = 0; i < Camera.main.transform.childCount; i++)
{
if (Camera.main.transform.GetChild(i).GetComponent<ParticleSystem>() != null)
{
Camera.main.transform.GetChild(i).GetComponent<ParticleSystem>().Play();
}
}
CancelInvoke("Check");
sceneIsOver = true;
Invoke("nextScene", 0);
}
}
//...
}
}
}